我怎么能用最少的努力将我所有的提交(即使有合并和冲突解决方案)压榨到一个功能分支上的单个提交,然后在我开始开发的分支之上重新建立基础从? 不想重做已经解决的冲突。尽量避免麻烦。
假设我们正在谈论的分支是master和featureX。
答案 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-history和https://medium.com/@dirk.avery/the-definitive-git-rebase-guide-dbd7717f9437
现在我们要确保,我们拥有master
分支的最新版本。 git checkout master
,后跟git pull origin master
(假设您将原点用作上游)和git checkout featureX
。
最后,我们可以使用featureX
将master
移植到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历史记录中可能存在中间分支和合并;重新设置基准不会很容易。