如何一次压扁/变基

时间:2019-02-21 19:35:10

标签: git merge rebase git-reset squash

我怎么能用最少的努力将我所有的提交(即使有合并和冲突解决方案)压榨到一个功能分支上的单个提交,然后在我开始开发的分支之上重新建立基础从? 不想重做已经解决的冲突。尽量避免麻烦。

假设我们正在谈论的分支是master和featureX。

3 个答案:

答案 0 :(得分:0)

首先使用git branch检查,您当前的工作分支是什么。接下来,如果尚未使用featureX,请使用git checkout featureX切换到它。

我们现在将计算出您想压缩成一个位置的提交数量。为此,我们将使用git log。要获得更好的视图,请使用git log --graph --decorate --pretty=oneline --abbrev-commit

下一步进行实际压扁:git rebase -i HEAD~<NUMBER OF COMMITS TO SQUASH>或使用SHA哈希git rebase -i <SHA>。如果您需要有关此步骤的帮助,请阅读以下两篇不错的文章:https://thoughtbot.com/blog/git-interactive-rebase-squash-amend-rewriting-historyhttps://medium.com/@dirk.avery/the-definitive-git-rebase-guide-dbd7717f9437

现在我们要确保,我们拥有master分支的最新版本。 git checkout master,后跟git pull origin master(假设您将原点用作上游)和git checkout featureX

最后,我们可以使用featureXmaster移植到git rebase master上,并可以将featureX推送到GitHub,GitLab或我们喜欢的任何地方。 git push origin featureX
注意:如果您以前曾推送过featureX,则需要强制推送git push origin featureX --force。确保仅在您正在工作的分支上执行此操作,这些分支不会共享,否则人们会遇到麻烦。

可以在以下位置找到一篇文章,其中介绍了整个基础和压榨东西,以使提交历史记录保持良好的清洁状态:https://blog.carbonfive.com/2017/08/28/always-squash-and-rebase-your-git-commits/

答案 1 :(得分:-1)

我知道的最简单的方法是

const Component: React.SFC<Props> = (props: Props) => (

你去了。无需重新踩踏,也无需挤压。

答案 2 :(得分:-2)

听起来您想使用壁球合并。

git checkout master
git merge --squash featureX
git commit

这会将所有更改应用于主文件,就像您已合并(或重新基于其)featureX一样,作为单个“非合并”提交。

有两个原因。可以通过进行交互式变基来一步一步压缩和变基,但是(1)如果您要压缩每个中间提交,则并没有真正的必要-在这种情况下,压缩合并是可行的快捷方式; (2)您注意到您要合并的featureX历史记录中可能存在中间分支和合并;重新设置基准不会很容易。