2010-07-14 78 views
9

当我对前几次提交的更改进行修复时,我总是连续两次结束运行rebase。是否可以一步完成这个工作流程?假设我有4个新的提交。我可以重新绑定和压缩同时提交吗?

* (master) D 
* C 
* B 
* A 
* Base 

我在B中发现一个错误,所以我创建了一个分支并修复它。

* (master) D 
* C 
| * (fix) Fix. 
|/ 
* B 
* A 
* Base 

接下来,我跑git rebase --onto fix B D C和d移动到B.

* (master) D' 
* C' 
* (fix) Fix. 
* B 
* A 
* Base 

最后我跑git rebase --i fix^^看到过去几年提交和我压扁B和修复成一个单一的提交。

* (master) D' 
* C' 
* B' 
* A 
* Base 

有没有更快的方法来完成相同的工作流程?我想合并会更容易,但合并对我来说是因为我使用的git svn需要线性历史记录。

+2

也许'fixup'和'autosquash'选项可以在这里帮助吗? http://stackoverflow.com/questions/2302736/trimming-git-checkins-squashing-git-history/2302947#2302947 – VonC 2010-07-15 04:15:46

+0

@VonC谢谢,这将至少使这些步骤更快一点。 – 2010-07-15 12:36:08

+0

优秀(一开始)。您可以发布一个答案,说明这些选项的步骤更快。 – VonC 2010-07-15 12:47:10

回答

5

当交互式底座中的提交列表编辑器出现时,您可以自由地添加,删除或重新排序提交。这基本上是一种影响即将发生的樱桃采摘循环的方式(这是rebase归结为的)。

+0

ADD部分是我所缺少的。谢谢。 – 2010-12-30 15:54:26

3

您是否知道--squash选项为git merge

--squash

生产工作树和索引状态,就像一个真正的合并发生的事情(除了合并信息),但实际上并没有作出承诺或移动HEAD,也没有记录$GIT_DIR/MERGE_HEAD引起下一个git commit命令来创建一个合并提交。这允许您在当前分支上创建一个单独的提交,其效果与合并另一个分支相同(或者在章鱼的情况下更多)。

+0

+1因为我不知道--squash。但是,这需要相同数量的步骤。在创建修复程序之后,我需要做git merge --squash,然后git commit在头部,然后git rebase -i重新排序并将修复程序压缩到提交的错误中。 – 2010-07-14 22:46:14

相关问题