什么LasseV。卡尔森说没事。由于他重新设置了分支,因此您无法真正拉动它并重新合并所有内容。
如果您没有更多“新”提交,只需删除您尝试拉取的分支并拉取它。由于您的所有变更集都存在,只需将您的分支重置为与服务器上的完全相同,然后从那里继续。如果你有新的提交,那么它会有点困难。
首先创建分支的副本:
git checkout [branch]
git checkout -b branchCopy
删除分支(如果由于未合并而不想删除分支,请使用 -f)
git checkout -d branch
获取服务器上的内容(来源可能是不同的远程)并使用服务器上的内容重新创建分支
git fetch [origin]
git checkout origin/branch
git checkout -b branch
现在你将拥有branch
并且branchCopy
使用 git log,检查要添加到分支的提交。并用于cherry-pick
添加它们
git checkout branch
git cherry-pick "commit"
添加所有未合并的提交后,只需推送到服务器。并删除“branchCopy”
如果您在 branchCopy 和分支之间有很多不同的变更集。我想有一种方法可以重新调整一组提交的基础,branchCopy
但branch
如果你只是重新调整它。它将添加所有更改,因为复制的提交具有不同的哈希值。
所以是的,除非你知道自己在做什么,否则不要变基。如果你想变基并与很多人一起工作。最好的办法是确保每个人都知道你正在变基。
我想任何好的时间旅行者的第一条规则是“不要改变历史”
小费
这是使时间旅行比以往更安全的提示。在工作中,我使用了这个流程:
在我的功能分支上工作,并在完成后合并到 master 中。
当你在你的分支上工作时,它几乎可以保证你不会对 master 分支上的提交进行 rebase。完成后,您必须做出选择。您可以在 master 中合并您的分支或在 master 上重新设置您的分支。
如果您正在重新定位您的分支,您将必须获取最后一个主提交并在它的基础上重新定位并尽可能快地推送它。当人们拉它时,它应该仍然快进,因为你没有改变 master 的历史,而是你的分支的历史。
不过说实话,用了bitbucket之后,(关于github就不能多说了)。我处理拉取请求。即使分支是快进的,它也会进行合并提交,在大多数情况下避免变基可能会更容易。Pullrequest 是一个很棒的创作,如果您使用具有它的系统,应该使用它。
它可能会创建一个合并提交,但它会留下合并提交的历史记录,由谁以及您可以评论它们。人们可以处理要合并的功能,并且有人可以在需要时使用拉取请求来审查代码并将代码合并到主代码中。