Git 笔记

Git 笔记

记录一些 Git 的使用技巧

Clone

git clone url

添加远程库

git remote add remote-name url # 为本地库添加远程库
git remote rename oldname newname # 修改本地的远程库名字,防止重名

添加代码

git add ./*  # 添加当前文件夹下的所有文件到本地库缓存
git add -A ./*  # 添加,删除本地库缓存中的所有文件

提交代码到本地库

git commit -m "message"

本地库推送到远端库

git push -u origin master # 第一次推送到名为origin远端库的master分支
git push # 之后就可以直接使用此命令推送到 origin master
git push 远程库名 远程分支名

更新本地库

git pull origin master #  从远程origin master分支更新本地库
git pull remote-repo-name branch-name # 从remote-repo-name master 更新本地库

补充提交

一次 commit以后,突然发现还有点问题,又修改了几行代码,不想生成一个新的 commit 怎么办?可以使用如下命令。

git add .
git commit --amend --no-edit

git grep

git grep "example"  # 搜索包含字符串 "example" 的所有文件:

git 命令

// 删除 stage 中的文件夹
git rm directoryname -r -f
// 打包成可以发布的压缩包
git archive
// check the changes before the file was added.
git diff
// 只显示一行递交日志
git log --pretty=oneline check commit log
// 显示分支和单行提交日志
git log --graph --decorate --pretty=oneline --abbrev-commit
// 最近使用的命令
git reflog
// 用图形显示最近的提交状况
git log --graph

git fundamental

提交号

de0f7af4a7b8a91aeddec1d1a11b227c0abf3546 append GPL
108236f87f8d615c50cdc68df0a4da381b8edbe5 new char
7745e97f222147e397c373f5b7be29c4fc377286 first file in git
十六进制的字符串随机生成来标记 commit id

Git 必须知道当前版本是哪个版本,在Git中,用 HEAD 表示当前版本,上一个版本就是 HEAD^,上上一个版本就是HEAD^^,当然往上 100 个版本写 100 个 ^ 比较容易数不过来,所以写成 HEAD~100。

回退

git reset              // 回到上一个版本
git reset --hard HEAD^ // 同样是回到上一个版本
git checkout -- filename     // 在添加之前取消修改
git checkout -- readme.txt

一种是 readme.txt 自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态。
一种是 readme.txt 已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。
总之,就是让这个文件回到最近一次 git commit 或 git add 时的状态。

git reset HEAD -- filename // 撤销修改
git checkout -- filename   // 取消工作区的修改

删除

git rm filename    // 确实要删除该文件
git commit -m " "  // 提交修改
git checkout -- filename // 撤销修改

GitHub

将本地库与 GitHub 连接起来

创建 SSHKey。在用户主目录下,看看有没有 .ssh 目录,如果有,再看看这个目录下有没有id_rsa 和 id_rsa.pub 这两个文件,如果已经有了,可直接跳到下一步。如果没有,打开Shell(Windows下打开Git Bash),创建 SSH Key:

ssh-keygen -t rsa -C "youremail@example.com"

你需要把邮件地址换成你自己的邮件地址,然后一路回车,使用默认值即可,由于这个 Key 也不是用于军事目的,所以也无需设置密码。如果一切顺利的话,可以在用户主目录里找到 .ssh 目录,里面有 id_rsa 和 id_rsa.pub 两个文件,这两个就是 SSHKey 的秘钥对,id_rsa 是私钥,不能泄露出去,id_rsa.pub 是公钥,可以放心地告诉任何人。

# 在github上创建一个新的仓库,将本地库与远程库连接起来。
git clone URL
git push -u origin master //orgin 远程的master分支
git push orgin master // 非第一次,可以取消-u参数
# 分支的创建和合并
git  checkout -b  dev //create and change into the branch
git checkout master //return master match
git merge branchname //merge branchname into current branch
git branch -d dev //delete dev branch
# 分支管理
git stash //保存现场
git stash pop //恢复工作区并弹出断点
git stash apply //恢复工作区不弹出断点
git branch -D name //强行删除分支

git diff

通常 working area 的文件都是被当作目标文件来看待。

  1. -­开头的行,是只出现在源文件中的行。
  2. +开头的行,是只出现在目标文件中的行。
  3. 空格开头的行,是源文件和目标文件中都出现的行。
  4. 差异按照差异小结进行组织,每个差异小结的第一行都是定位语句,由@@开头,@@结尾。
chenshu@chenshu­yangzhouhome:~/kaimei/data_service/src$ git diff 0c5ee16a6a4c849d0ae0448caa8ff17
4399c7c3c ./socket_helper.cpp
diff ­­--git a/data_service/src/socket_helper.cpp b/data_service/src/socket_helper.cpp
index d606452..047e213 100755
a/data_service/src/socket_helper.cpp
+++ b/data_service/src/socket_helper.cpp
@@ ­4,6 +4,7 @@
#include "data/login_response.h"
#include "data/heartbeat_response.h"
#include "helper/parser.h"
+#include "helper/time_measure.h"
#include <booster/log.h>
#include "exception/socket_error.h"
#include "exception/data_error.h"

上面的diff结果表明

  1. 某个提交记录 0c5ee 代表的 socket_helper.cpp 文件是源文件,当前 working area的 socket_helper 文件是目标文件。
  2. 在源文件第 4 行开始的 6 行和目标文件第 4 行开始的 7 行构成一个差异小结。
  3. 这个差异小结中,目标文件添加了一行 #include "helper/time_measure.h"。
  4. 其他空格开头的行表明没有差异。

git submodule

Git 的子模块(submodule)功能允许你将一个 Git 仓库作为另一个 Git 仓库的子目录。这在管理大型项目时非常有用,尤其是当你的项目依赖于外部库或框架时。

初始化子模块

git submodule add <repository-url> [path]

其中 是子模块仓库的 URL,[path] 是子模块在主仓库中的相对路径(可选)。

克隆包含子模块的仓库

当你克隆一个包含子模块的仓库时,需要使用 --recurse-submodules 选项来同时克隆子模块,如图所示:

img

git clone --recurse-submodules <repository-url>

更新子模块

当你的主仓库中的子模块需要更新时,可以使用以下命令:

git submodule update --remote

etc

img

git 修改子模块的路径

git 在两个地方存储有关子模块的信息。第一个是在一个名为的文件中 .gitmodules,该文件被签入 git 存储库。对此文件的更改将传播到其他存储库。另一个位置在.git/config,并且它是执行大多数命令时git实际看起来的位置。所以想象你已经在一个项目上工作了一段时间,并且有一个名为的子模块 foo。这个子模块的文件是从一些 url 中检出的,在哪里并不重要。但是,在某些时候,这个网址会发生变化。也许它会发生变化,以便从不同的服务器或不同的路径或其他任何地方检出子模块。当您更新存储库时,您 .gitmodules 将更新文件的副本,但不会更新您的 .git/config 文件; 你仍然会从旧网址中查看。当您想要从新网址开始签出时,您将运行 git submodule sync 以将新配置从中复制 .gitmodules 到 .git/config 。git 不会自动执行此操作,因为您可能已对配置进行了自己的更改,并且不希望覆盖它们。

posted on   LambdaQ  阅读(28)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

统计

点击右上角即可分享
微信分享提示