提交的技巧 #1
接下来这种情况也是很常见的:你之前在 newImage 分支上进行了一次提交,然后又基于它创建了 caption 分支,然后又提交了一次。
此时你想对的某个以前的提交记录进行一些小小的调整。比如设计师想修改一下 newImage 中图片的分辨率,尽管那个提交记录并不是最新的了。
我们可以通过下面的方法来克服困难:
- 先用
git rebase -i将提交重新排序,然后把我们想要修改的提交记录挪到最前 - 然后用
commit --amend来进行一些小修改 - 接着再用
git rebase -i来将他们调回原来的顺序 - 最后我们把 master 移到修改的最前端(用你自己喜欢的方法),就大功告成啦!
当然完成这个任务的方法不止上面提到的一种(我知道你在看 cherry-pick 啦),之后我们会多点关注这些技巧啦,但现在暂时只专注上面这种方法。 最后有必要说明一下目标状态中的那几个' —— 我们把这个提交移动了两次,每移动一次会产生一个 ';而 C2 上多出来的那个是我们在使用了 amend 参数提交时产生的,所以最终结果就是这样了。
也就是说,我在对比结果的时候只会对比提交树的结构,对于 ' 的数量上的不同,并不纳入对比范围内。只要你的 master 分支结构与目标结构相同,我就算你通过。
提交的技巧 #2
正如你在上一关所见到的,我们可以使用 rebase -i 对提交记录进行重新排序。只要把我们想要的提交记录挪到最前端,我们就可以很轻松的用 --amend 修改它,然后把它们重新排成我们想要的顺序。
但这样做就唯一的问题就是要进行两次排序,而这有可能造成由 rebase 而导致的冲突。下面还是看看 git cherry-pick 是怎么做的吧。
要在心里牢记 cherry-pick 可以将提交树上任何地方的提交记录取过来追加到 HEAD 上(只要不是 HEAD 上游的提交就没问题)。
来看看这个例子:
git cherry-pick c2
这一关的目标和上一关一样,通过 --amend 改变提交记录 C2,但你不能用 rebase -i。自己想想要怎么解决吧! :D
对了,提交记录上面的'的数量并不重要,只是引用的不同而已。也就是说如果你的最终结果在某个提交记录上多了个',我也会算你通过的。
git checkout master
git cherry-pick c2 c3
本文探讨了如何在git中通过cherry-pick和git rebase技巧调整提交记录,包括使用--amend进行修改,以及在避免rebase冲突的同时保持提交结构一致性。重点在于理解提交树的移动操作对'标记的影响,以及如何确保master分支目标状态的正确性。
1654

被折叠的 条评论
为什么被折叠?



