Git-命令

Git branch

Git 的分支非常轻量。只是简单地指向某个提交纪录

git checkout -b bugFix
创建一个新的分支并切换到新分支

Git merge

新建一个分支,在其上开发某个新功能,开发完成后再合并回主线


image.png
git checkout -b bugFix
git commit -m 'c2'
新建并切换到新分支上,且 提交 一次
git checkout main
git commit -m 'c3'
切换回 并行分支,且 提交 一次
git merge bugFix
把 bugFix 分支合并到 main 分支

Git Rebase

第二种合并分支的方法是 git rebase。Rebase 实际上就是取出一系列的提交记录,“复制”它们,然后在另外一个地方逐个的放下去
Rebase 的优势就是可以创造更线性的提交历史


image.png
git checkout -b bugFix
git commit -m 'c2'
新建并切换到 新 分支上,且 提交 一次
git checkout main
git commit -m 'c3'
切换回另一并行分支,且提交一次
git checkout bugFix 
git rebase main
再次切换到 新 分支,rebase 到 另一并行分支

HEAD~<num>

image.png
git checkout '哈希'  //   改变 HEAD 指向
git checkout HEAD^  //  相对引用(^)
使用 ^ 向上移动 1 个提交记录 
使用 ~<num> 向上移动多个提交记录,如 ~3  
git branch -f <分支> HEAD~<num>
将 分支 强制指向 HEAD 的第 <num> 级父提交
git branch -f main c6
git branch -f bugFix c0
git checkout HEAD~1

想看 HEAD 指向,可以通过 cat .git/HEAD 查看, 如果 HEAD 指向的是一个引用,还可以用 git symbolic-ref HEAD 查看它的指向。但是该程序不支持这两个命令)

git reset git revert

image.png

git reset
在reset后,C2 所做的变更还在,但是处于未加入暂存区状态,且对 远程分支 无效
git revert
新提交记录 C2' 引入了更改,这些更改刚好是用来撤销 C2 这个提交的,也就是说 C2' 的状态与 C1 是相同的
image.png

git reset HEAD~1
撤销本地 local 分支 的最近一次提交
git checkout pushed
切换 远程分支 pushed
git revert HEAD
撤销远程 pushed 分支的最近一次提交

git cherry-pick <提交号>

image.png
git cherry-pick c3 c4 c7

rebase 交互式

交互式 rebase 指的是使用带参数 --interactive 的 rebase 命令, 简写为 -i


image.png
git rebase -i HEAD~4
'pick:保留该commit(缩写:p)
reword:保留该commit,但我需要修改该commit的注释(缩写:r)
edit:保留该commit, 但我要停下来修改该提交(不仅仅修改注释)(缩写:e)
squash:将该commit和前一个commit合并(缩写:s)
fixup:将该commit和前一个commit合并,但我不要保留该提交的注释信息(缩写:f)
exec:执行shell命令(缩写:x)
drop:我要丢弃该commit(缩写:d)
--onto的意思是要将该指定的提交复制到哪个分支上'

rebase 界面能做3件事:
调整提交记录的顺序
删除你不想要的提交(通过 pick 来完成)
合并提交,允许把多个提交记录合并成一个

提交技巧

image.png
git rebase -i HEAD~2  //  交换C2和C3的位置
git commit --amend  //  当前结点的父结点再分出一个修改后的子结点
git rebase -i HEAD~2  //  调回顺序
git checkout main  //  将当前分支切回 主分支
git rebase <合并分支>

提交技巧 git cherry-pick

image.png
git checkout main // 切换到主分支
git cherry-pick newImage  //  将C2接到C1后面
git commit --amend  //  创造新结点C2''
git cherry-pick caption  //  将C3加至C2''后面

git tag <标签名> <提交点>

image.png
git tag v0 c1  //  给c1 加上标签名
git checkout c2  //  切换指向到 c2
git tag v1  //  c2 加上标签名 第二参数不写默认当前指向

Git Describe

image.png

标签在代码库中起着“锚点”的作用,git describe用来描述离你最近的锚点

git describe <ref>  //  任何能被 Git 识别成提交记录的引用,默认为当前 <HEAD>

输出的结果是这样的:
<tag>_<numCommits>_g<hash>
tag 表示的是离 ref 最近的标签, numCommits 是表示这个 ref 与 tag 相差有多少个提交记录, hash 表示的是你所给定的 ref 所表示的提交记录哈希值的前几位。
当 ref 提交记录上有某个标签时,则只输出标签名称
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容