Git 给定起始和结束SHA';s
我有一个分支机构,大约有20个分支机构Git 给定起始和结束SHA';s,git,squash,Git,Squash,我有一个分支机构,大约有20个分支机构 分支上的第一个SHA是bc3c488… 分支上的最后一个SHA是2c2be6… 如何将所有提交合并在一起 我希望在不使用交互式重基的情况下执行此操作,因为有太多的提交 我需要将其用于github Pull请求,其中要求我合并提交 需要在不进行git合并的情况下执行此操作--挤压,因为我需要在本地挤压,而另一个开发人员进行了合并,并希望我在合并之前先进行挤压。交互式重定基可在此处提供帮助 假设您的分支基于上游的主分支。(假设您的上游由“上游”遥控器定义) 这
分支上的第一个SHA是
bc3c488…
分支上的最后一个SHA是
2c2be6…
如何将所有提交合并在一起
我希望在不使用交互式重基的情况下执行此操作,因为有太多的提交
我需要将其用于github Pull请求,其中要求我合并提交
需要在不进行git合并的情况下执行此操作--挤压,因为我需要在本地挤压,而另一个开发人员进行了合并,并希望我在合并之前先进行挤压。交互式重定基可在此处提供帮助 假设您的分支基于上游的主分支。(假设您的上游由“上游”遥控器定义) 这样做:
git rebase -i upstream/master
如果您需要更精确,可以用任何SHA替换“上游/主”
git rebase -i bc3c488
您将被放置在由$editor环境变量定义的编辑器中。将每行的“pick”改为“squash”(简称“s”),最上面的一行除外。这是将所有这些承诺挤压成一个
与其他工作行的任何合并或重设基础一样,可能存在代码冲突。如果出现这种情况,请执行“git status”以查看哪些文件存在冲突,编辑这些文件(冲突将用>符号分隔),然后执行“git rebase--continue”
重新设置replays提交的时间间隔,如果您发现自己一次又一次地修复同一冲突,请记住这一点(也有工具可以帮助您解决这一问题)
然后,您将有机会编辑新压缩提交的提交消息
用-f推送到远程分支(这会重新写入您想要的历史记录,但要小心这一条)
这是一个很好的交互式重基教程:您可以使用git-rebase中的交互式shell有选择地选择要重基的提交
git rebase-i bc3c488。。。
然后将要挤压的提交更改为挤压而不是拾取
签出如果第一个SHA是头部,您也可以使用此方法:
git reset --soft $OLD_SHA; git add -A; git commit --amend --no-edit
小心,此命令将更改回购的历史记录
<如果你想压制你的历史中的承诺:
|---* --- 0 --- 1 ---- 2 --- 3 --- * --- * --- * --- HEAD
与本例类似,提交1、2和3
我真的建议使用
rebase-I
分支上的第一个SHA是bc3c488。。。
分支上的最后一个SHA是2c2be6
# non dangerous implementation that creates a new branch.
git checkout 2c2be6
git rebase -i bc3c488~
git checkout -b your_new_squashed_branch
# then squash the commits by replacing the pick with s
提交结束时的tilda(~)表示上一次提交确保commit bc3c488在交互重基上可见
# dangerous implementation that rewrites history
git checkout -b new_branch_with_rewritten_history
git reset --hard 2c2be6
git rebase -i bc3c488~
# then squash the commits by replacing the pick with s
git reset--soft${FIRST_SHA}
然后进行新的提交将压扁它们。我在某个地方得到了一个较长的答案,但搜索没有找到它。这里的第一个是指一个较旧的提交?第二个是指更新的(最近的)提交?我建议将这个标记为可接受的答案。它具有最详细的信息,并且可能是完成问题中提出的任务的最安全的方式。