移动提交记录
git cherry-pick
自由修改提交树
git cherry-pick
git cherry-pick <提交号>
如果你想将一些提交复制到当前所在的位置(HEAD
)下面的话, Cherry-pick 是最直接的方式了。我个人非常喜欢 cherry-pick
,因为它特别简单。
在master分支上,使用git cherry-pick C2 C4
就把side分支上的C2和C4分支复制过来了,非常优秀
交互式 rebase
git rebase -i HEAD~3
-i 代表 interact 交互,这样会弹出一个交互界面
在目标分支输入 git rebase -i HEAD~3
可以删除提交,拖动修改顺序
这里主要记住git cherry-pick, 工作中常用
杂项
技术、技巧和小贴士集合
场景一
我正在解决某个特别棘手的 Bug,为了便于调试而在代码中添加了一些调试命令并向控制台打印了一些信息。
这些调试和打印语句都在它们各自的提交记录里。最后我终于找到了造成这个 Bug 的根本原因,解决掉以后觉得沾沾自喜!
最后就差把
bugFix
分支里的工作合并回master
分支了。你可以选择通过 fast-forward 快速合并到master
分支上,但这样的话master
分支就会包含我这些调试语句了。你肯定不想这样,应该还有更好的方式……
实际上我们只需要让Git复制解决问题的那个提交就可以了。 这里我们可以使用cherry-pick 或者 rebase -i
git cherry-pick <hash值>
场景二
你之前在
newImage
分支上进行了一次提交,然后又基于它创建了caption
分支,然后又提交了一次。此时你想对的某个以前的提交记录进行一些小小的调整。比如设计师想修改一下
newImage
中图片的分辨率,尽管那个提交记录并不是最新的了。
用git rebase 可以先将 提交2 和提交3进行更换,然后更改提交2(amend,附加提交),再进行交换提交2和提交3
场景三
分支很容易被人为移动,并且当有新的提交时,它也会移动。分支很容易被改变,大部分分支还只是临时的,并且还一直在变。
有没有什么永远指向某个提交记录的标识呢? git tag
除非删除了某个提交,否则这个tag永远就是标识这次提交
场景四
git describe :找出和你距离最近的tag
例子哈
对你有用的话,就点个赞吧!