Git常用命令记录
本文最后更新于:2022年8月6日 晚上
基础篇
提交
以当前的快照为基础,创建一个新的快照
git commit
分支
创建分支,就是创建一个指针 newImage,指向当前的快照
git branch ‘newImage’
切换分支
git checkout ‘分支名字’
切换分支并提交
git checkout ‘newImage’; git commt
合并分支
- git merge
当前在 main 分支,还有一个 bugFix 分支,使用git merge bugFix
把 bugFix 合并到 main 里
切换到 bugFix 分支, 把 main 分支合并到 bugFix 分支:git checkout bugFix; git merge main
- git rebase
Rebase 实际上就是取出一系列的提交记录,“复制”它们,然后在另外一个地方逐个的放下去。
将 bugFix 分支的内容移动到 main 分支后面,
先切换到 bugFix 分支,然后git rebase main
;
分离HEAD
在提交树上移动
git checkout c4
相对引用:改变HEAD的指向
- 使用
^
向上移动一个提交记录; - 使用
~<num>
向上移动多个提交记录,例如:~3
main^
相当于 找 main 的父节点:git checkout main^
git checkout HEAD^
“~”操作符
如果你想在提交树中向上移动很多步的话,敲那么多 ^ 貌似也挺烦人的,Git 当然也考虑到了这一点,于是又引入了操作符 ~。
该操作符后面可以跟一个数字(可选,不跟数字时与 ^ 相同,向上移动一次),指定向上移动多少次。咱们还是通过实际操作看一下吧
git checkout HEAD~4:后退4步
强制修改分支位置
我使用相对引用最多的就是移动分支。可以直接使用 -f 选项让分支指向另一个提交。例如:
git branch -f main HEAD~3
上面的命令会将 main 分支强制指向 HEAD 的第 3 级父提交。
git branch -f main HEAD~3
命令可以让 mian 去指定的位置
撤销变更
一是 git reset,还有就是 git revert。
本地使用 git reset HEAD~1:回退1个
为了撤销更改并分享给别人,我们需要使用 git revert。
revert 会创建一个新的提交,这个新的提交和上上个提交是一样的。
git revert HEAD
revert 后,可以把更改推送到远程仓库了。
整理提交记录
到现在我们已经学习了 Git 的基础知识 —— 提交、分支以及在提交树上移动。 这些概念涵盖了 Git 90% 的功能,同样也足够满足开发者的日常需求
然而, 剩余的 10% 在处理复杂的工作流时(或者当你陷入困惑时)可能就显得尤为重要了。接下来要讨论的这个话题是“整理提交记录” —— 开发人员有时会说“我想要把这个提交放到这里, 那个提交放到刚才那个提交的后面”, 而接下来就讲的就是它的实现方式,非常清晰、灵活,还很生动。
Git Cherry-pick
本系列的第一个命令是 git cherry-pick, 命令形式为:
git cherry-pick <提交号>...
如果你想将一些提交复制到当前所在的位置(HEAD)下面的话,
Cherry-pick 是最直接的方式了。我个人非常喜欢 cherry-pick,因为它特别简单。
当前在 main 分支,执行 git cherry-pick c2 c4
, 将 side 分支的 c2和c4复制到当前 main 分支下面;
交互式的 rebase
当你知道你所需要的提交记录(并且还知道这些提交记录的哈希值)时,
用 cherry-pick 再好不过了 —— 没有比这更简单的方式了。
但是如果你不清楚你想要的提交记录的哈希值呢? 幸好 Git 帮你想到了这一点,
我们可以利用交互式的 rebase —— 如果你想从一系列的提交记录中找到想要的记录,
这就是最好的方法了
交互式 rebase 指的是使用带参数 –interactive 的 rebase 命令, 简写为 -i
如果你在命令后增加了这个选项, Git 会打开一个 UI 界面并列出将要被复制到目标分支的备选提交记录,
它还会显示每个提交记录的哈希值和提交说明,提交说明有助于你理解这个提交进行了哪些更改。
在实际使用时,所谓的 UI 窗口一般会在文本编辑器 —— 如 Vim —— 中打开一个文件。
考虑到课程的初衷,我弄了一个对话框来模拟这些操作。
git rebase -i HEAD~4
可以选择复制的节点快照
在 main 分支,执行 git rebase -i HEAD~4
, 选择要复制的节点快照和顺序;
创建本地仓库
新建远程仓库
新建本地仓库,git-test
1 |
|
初始化仓库
1 |
|
关联远程库
# git remote add origin(默认origin,可修改) branch_Name(为空时默认为master) url
两个地方的仓库名不需要相同,因为通过在本地仓库目录下执行这条命令(命令中包含远程库的名字)已经将两者建立了联系
1 |
|
创建文件,修改文件
添加所有文件到本地库
1 |
|
提交文件到本地库
1 |
|
将本地库的所有内容推送到远程库上
加上了-u参数(推送和关联),Git不但会把本地的master分支内容推送到远程新的master分支,
还会把本地的master分支和远程的master分支关联起来
以后即可直接用git push代替git push origin master
1 |
|
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!