[译]git rebase -i

时间:2022-03-02 09:27:53

使用rebase -i会在终端出现一个交互页面. 在这个交互页面中我们可以对要rebase的commit做一定的修改.

用法

git rebase -i <master>

把当前的分支的commit放在<base>后面, -i会打开一个编辑器, 在这你可以为每一个commit输入一个命令, 这个命令决定了如何把单个的commit传输到new base. 还可以改变commit列表的顺序.

[译]git rebase -i

讨论

大多数开发者喜欢在merge一个分支到master的时候使用rebase -i打磨我们这个feature分支. 他给了我们机会合并一些commit, 删除一些commit, 对commit进行排序.

例子

# Start a new feature
git checkout -b new-feature master
# Edit files
git commit -a -m "Start developing a feature"
# Edit more files
git commit -a -m "Fix something from the previous commit" # Add a commit directly to master
git checkout master
# Edit files
git commit -a -m "Fix security hole" # Begin an interactive rebasing session
git checkout new-feature
git rebase -i master

最后的命令会打开一个编辑器, 其中有两行命令.

pick 32618c4 Start developing a feature
pick 62eed47 Fix something from the previous commit

在这你可以修改pick命令. 在这个例子中, 我们使用squash合并这两个commit:

pick 32618c4 Start developing a feature
squash 62eed47 Fix something from the previous commit

保存关闭编辑器后rebase开始. 这是会打开一个新的编辑器让我们填写commit描述.整个过程可视化如下:

[译]git rebase -i

注意了squash commit有一个新的ID号, 这表明他是一个全新的commit.

最后使用fase -forward merge集成feature分支:

git checkout master
git merge new-feature