Git:如何从一个分支到另一个主要的提交和压缩提交?

Via*_*iuk 24 git branch rebase squash

我正在尝试将我的所有提交从当前分支重新压缩并压缩到主分支.这是我正在尝试做的事情:

git checkout -b new-feature
Run Code Online (Sandbox Code Playgroud)

在我尝试之后做了几次提交:

git rebase -i master
Run Code Online (Sandbox Code Playgroud)

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

git checkout master
git rebase -i new-feature
Run Code Online (Sandbox Code Playgroud)

它给我和编辑带有noop消息的窗口.

我知道命令:

git merge --squash new-feature
Run Code Online (Sandbox Code Playgroud)

但我正在努力学习rebase命令.

Joe*_*Joe 52

让我们通过步骤.

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

git checkout -b new-feature
Run Code Online (Sandbox Code Playgroud)

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"
Run Code Online (Sandbox Code Playgroud)

3 - 接下来,选择并将任何提交压缩成一个漂亮的提交消息

git rebase -i master
Run Code Online (Sandbox Code Playgroud)

这里需要记住的关键是在第一次提交后将所有提交的"pick"文本更改为"squash".这会将所有提交压缩到您的主分支.

4 - 选择主分支

git checkout master
Run Code Online (Sandbox Code Playgroud)

5 - 将HEAD和主分支移动到new-feature所在的位置:

git rebase new-feature
Run Code Online (Sandbox Code Playgroud)

您可以在此可视化工具中尝试所有命令:http: //pcottle.github.io/learnGitBranching/

  • 你可能会得到一个"没有先前提交就不能压缩"的消息.http://stackoverflow.com/questions/2563632/how-can-i-merge-two-commits-into-one (6认同)

kni*_*ttl 6

在重新定位时,Git不会将提交移动到另一个分支.它将移动分支,包括其所有提交.如果您希望在重新定位之后将提交转换为master,请使用git merge <branch tip or commit of branch>快速将master分支转发到该提交.