16

所以假设我有一个主分支,我们称之为'master'。我做了一个分支,称为“新功能”。我在这个分支中做了很多提交,所以我可以及时回到过去,但是在开发这个功能时我已经做了很多来回的工作,所以提交日志非常混乱。

例如,如果我要查看 git diff master..new-feature 。

如果我只想在“master”上创建一个新的新提交,其中包括两个分支之间的所有更改,那么最有效的方法是什么?

4

5 回答 5

38
git checkout master
git merge --squash new-feature
git commit

提交消息将开始显示正在合并/压缩的提交的整个列表,但您当然可以将其编辑为您想要的任何内容。

于 2013-02-14T22:17:39.540 回答
6

另一个可能对您更有效的选择是生成一个补丁文件,git diff --patch > "patch filename"然后使用git apply "patch file name".

git-diff 的手册页(尤其是“使用 -p 生成补丁”): http ://www.kernel.org/pub/software/scm/git/docs/git-diff.html

git-apply 的手册页:http: //www.kernel.org/pub/software/scm/git/docs/git-apply.html

于 2013-02-15T13:25:54.070 回答
1

您可以为此使用交互式变基:git rebase --interactive. 然后只需使用壁球选项。它仅使用来自提交的更新,但不创建提交。

于 2013-02-14T21:40:22.097 回答
1

使用 git rebase --interactive HEAD~(但是有很多提交想要压缩)。例如,git rebase --interactive HEAD~5。这将加载您最近的 5 次提交并打开一个带有消息的编辑器窗口。每条消息的开头都会有“pick”。转到最后一条消息,将“pick”更改为“squash”并退出。将打开一个新窗口,询问提交消息。这将是 squash 提交的新提交消息。退出,它会将所有的提交压缩成一个新的提交。

这里有一个例子: https ://ariejan.net/2011/07/05/git-squash-your-latests-commits-into-one

于 2013-02-14T21:45:11.477 回答
0

您可以提交功能分支中的所有内容,然后合并到 master 接受“他们的”所有更改。

这是一个 Stack Overflow 问题,对如何做到这一点有一个很好的答案: 是否有“git merge -s ours”的“他们的”版本?

于 2013-02-14T21:43:32.083 回答