Git: 如何将分支中的提交合并并压缩到主分支中?

30

我正在尝试将当前分支中的所有提交变基并压缩到主分支。这是我要做的:

git checkout -b new-feature

提交几次代码后,接着我尝试:

git rebase -i master

在这种情况下,提交将保留在new-feature分支中。

git checkout master
git rebase -i new-feature
它给了我一个编辑窗口,显示“noop”消息。
我知道这个命令:
git merge --squash new-feature

但是我目前正在学习 rebase 命令。

2个回答

61

让我们按照以下步骤进行。

1 - 我们创建一个新的功能分支

git checkout -b new-feature

2 - 现在您可以在新分支上添加、删除和更新任何内容。

git add <new-file>
git commit -am "Added new file"
git rm <file-name>
git commit -am "Removed a file"
cat "add more stuff to file" >> <new-file>
git commit -am "Updated files"

3 - 接下来,将所有提交压缩为一个漂亮的提交信息

git rebase -i master

在这里需要记住的关键是更改所有第一个提交后的文本"pick"为"squash"。这将把所有提交都压缩到你的主分支(master branch)中。

4 - 选择主分支(master branch)

git checkout master
将HEAD和主分支master移动到新功能new-feature所在的位置:
git rebase new-feature

你可以在这个可视化工具中尝试所有的命令: http://pcottle.github.io/learnGitBranching/


6
这样做可能会收到“无法压缩没有先前提交的信息”的提示。参考这个页面:https://dev59.com/5HE85IYBdhLWcg3w43sW - backdesk
1
不错...虽然在拉取/变基之前,我通常会压缩我的提交git rebase -i HEAD~##,然后再进行拉取/变基git pull --rebase origin master。我只是喜欢分成两步来做,这样可以让我在变基之前/之后进行审查。 - Tracker1
1
这个答案看起来比被选中的那个更合适。 - fernandopasik
1
我最好不要变基主分支:使用 git merge --ff new-feature 而不是 git rebase new-feature - Eugen Konkov
一个完整的答案应该涵盖如何将主分支中的最新更改合并到特性分支中。 - Ozymandias
真的没有默认压缩所有内容的 git rebase -i 命令吗?我几乎总是想要压缩整个功能分支,而且很惊讶似乎没有快捷方式可以实现这一点(不需要先计算精确的提交次数,或在重新基础时手动在每个提交旁边键入“s”)。 - Freewalker

7

当使用rebase命令时,Git不会将提交移动到另一个分支,而是移动整个分支及其所有提交。如果您想在将提交重定位到主分支后将其合并到master分支,请使用git merge <branch tip or commit of branch>命令来快速转发主分支至该提交。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接