Flatten在树枝上提交

Cof*_*ard 25 git

是否可以在与主服务器合并之前将分支上的提交压缩为单个提交?我认为这是一个相当普遍的情况,但也许我没有使用正确的搜索条件.

我将更详细地解释这个场景.通常,我希望在分支机构进行更改时进行许多本地提交,以确保我有一个全面的更改历史记录.但是一旦通过分支中的更改,当我合并到main时,我想将分支上的提交减少为单个,然后将其合并到main.我确实理解Git中的提交很便宜,但在某些情况下,我可能只是喜欢这样做.

*   merge to main
|\
* | commit 2 on main
* | commit 1 on main
| * commit 2 on branch
| * commit 1 on branch
|/
*   branch from main
Run Code Online (Sandbox Code Playgroud)

看起来像

*   merge to main
|\
* | commit 2 on main
* | commit 1 on main
| * commit on branch (branch commits flattened to one)
|/
*   branch from main
Run Code Online (Sandbox Code Playgroud)

对于git我是新手.如果我在使用条款时犯了错误,我会道歉.

tha*_*era 25

我建议学习使用交互式rebase,但如果它对你来说太复杂了,你可以简单地使用

git reset --soft <diverging-commit>

在不改变索引的情况下撤消所有提交到分歧点的提交,并且

git commit -s

对所有更改进行一次提交.


Fre*_*Foo 14

使用交互式变基.找到你的分支与master分离的提交(可以使用git merge-base;让我们调用commit <diverge>),然后

git rebase -i <diverge>
Run Code Online (Sandbox Code Playgroud)

弹出一个编辑器,允许您以交互方式重写历史记录.你想要压缩提交.

  • 谢谢。在按照您的提示查找了更多信息之后,我发现了该(http://ariejan.net/2011/07/05/git-squash-your-latests-commits-into-one/)帖子,并通过例。 (2认同)

Tre*_*son 11

您还可以使用git merge --squash <branch>合并分支而不执行任何提交:

$ git checkout master
$ git merge --squash mybranch
...
Squash commit -- not updating HEAD
Automatic merge went well; stopped before committing as requested
$ git commit
Run Code Online (Sandbox Code Playgroud)

当然,如果你能提供帮助,你应该抵制这样做的冲动.看你不应该撒谎:git rebase,修正,壁球和其他谎言,讨论为什么.

  • 关于说谎的文章似乎过分关注"说谎让你看起来很好".这一切都很好,但如何重新组织提交,使审查人员更容易进行代码审查,这是一个光荣的目标.在这种背景下会有多糟糕? (14认同)