选择某些提交到一次提交?

时间:2015-01-27 16:16:13

标签: git

我遇到了很多情况,我的git日志变得混乱了数百次提交。

commit d: add sky to scenery
commit c: add Christina to characters
commit b: add flowers to scenery
commit a: add Andrew to characters

commit f = b + d

之类的地方怎么样?
commit f: add scenery
commit e: add characters

1 个答案:

答案 0 :(得分:0)

项目随着时间的推移获得大量提交是很正常的: - )

如果您确定要将它们融合在一起,我会看到两种可能性:

  1. 使用交互式git rebase

    将当前分支的最新提交合并在一起
    git rebase --interactive HEAD~10
    

    打开一个显示最近10次提交的编辑器。将pick替换为squash(附加提交消息)或fixup(丢弃提交消息)。通过移动线条,您可以选择将哪些提交合并在一起。但是,更改顺序可能会导致合并冲突。

    编辑将首先代表当前的历史:

    pick ... older commits
    pick aaaaaaa add Andrew to characters
    pick bbbbbbb add flowers to scenery
    pick ccccccc add Christina to characters
    pick ddddddd add sky to scenery
    

    将其更改为您的喜好,例如:

    pick ... older commits (left untouched)
    reword aaaaaaa keep message, open editor to edit
    squash bbbbbbb append message to aaaaaaa
    fixup  ccccccc discard message
    fixup  ddddddd discard message
    
  2. Meld一起从其他(远程)分支提交。

    对于尚未成为当前分支的一部分的提交,挑选他们的更改并使用所有这些提交创建新提交可能是最好的方法。请使用git cherry-pick

    git cherry-pick --no-commit $commit1
    git cherry-pick --no-commit $commit2
    ...
    git commit -m "new commit message"
    
  3. 在这两种情况下,您都会创建具有不同SHA1值的新提交!编辑历史记录时要小心,并尽量避免使用已发布/共享的存储库。