我正在寻找一种方法将我的master
分支合并到我的test
分支,同时将我的提交保留在test
之上(合并master
之后) 。
适当的做法是什么?
答案 0 :(得分:1)
在Git中执行此操作的标准方法是使用rebase
。假设你想用分支A的更改来更新分支B,但是你想让你的工作保持在A的新工作的“顶部”。然后
git checkout B
git rebase A
# Or in one command
git rebase A B
结果是B中的所有提交,但不是A中的提交,将在A中的新提交之上重新提交。
除非您是唯一一个在分支机构工作的人,否则不要强行将您的重定位提交推送到远程仓库,或者您确定与您共享分支的其他用户可以强制推送变化。强>
因为B的提交是 重写 ,所以它们会有新的sha ID,因此Git不会认为新的提交与旧的提交与旧的提交相同ID,即使它们包含相同的内容。
如果您与其他人共享分支B,这很重要,因为他们可能拥有旧版本的B提交(包括所有旧的sha ID)。你的新提交将与旧的提交冲突,除非他们采取额外的步骤来更新你自己的提交。
虽然你的协作者可以用新的重新提交来更新他们的旧提交,但是大多数人会认为这太麻烦而不值得,所以重写共享分支/提交历史通常是不赞成和不鼓励的。
当您尝试将新重写的分支B推送到远程仓库时,远程将拒绝推送,因为新的重写提交将不是快进更新。推动成功的唯一方法是通过强制推送覆盖旧提交。如果没有其他人共享您的分支,可以强制推送,但是当分支 共享 时通常不鼓励,原因我上面提到的关于合作者必须放入的原因额外努力将旧提交与新提交同步。