Git 从主服务器恢复本地分支的提交
我有一个功能分支,其中有一些提交。然后我运行git rebase master并将该分支合并回master 所以就像Git 从主服务器恢复本地分支的提交,git,commit,revert,Git,Commit,Revert,我有一个功能分支,其中有一些提交。然后我运行git rebase master并将该分支合并回master 所以就像 git checkout -b somebranch ......some work commits here ..... git checkout master git fetch git merge origin/master git checkout somebranch git rebase master git checkout master git merge s
git checkout -b somebranch
......some work commits here .....
git checkout master
git fetch
git merge origin/master
git checkout somebranch
git rebase master
git checkout master
git merge somebranch
现在,我需要将某个分支中的所有提交全部从主节点中取出,可能需要稍后将其合并回主节点
更新:更改在一段时间前被推送到master,合并后有许多提交,因此如果合并提交仍然是最新的,并且您尚未将该提交推回到上游,则重置到head将不起作用,git reset-hard HEAD^应该在合并之前让您重新提交-即,将主分支返回到git merge origin/master之后的位置。如果合并提交仍然是最新的,并且您尚未将该提交推回上游,git reset-hard HEAD^应在合并之前将您重新提交-即,将您的主分支返回到git merge origin/master之后的位置。在master的本地副本上,您可以尝试以下操作,该操作将创建一个新的提交,其中恢复的更改与您在master上已执行的操作相反 git还原旧的\u提交^..新的\u提交 其中,较旧的_提交是功能分支提交的第一次提交,较新的_提交是功能分支的最后一次提交 或者,你也可以试试 git revert-n较旧的\u提交..较新的\u提交 它将还原提交所做的更改,但不会使用还原的更改创建任何新的提交。还原仅修改工作树和索引 注意:在母版的本地副本上使用1.7.4+时,您可以尝试以下操作,使用还原的更改创建新的提交,与您在母版上已执行的操作相反 git还原旧的\u提交^..新的\u提交 其中,较旧的_提交是功能分支提交的第一次提交,较新的_提交是功能分支的最后一次提交 或者,你也可以试试 git revert-n较旧的\u提交..较新的\u提交 它将还原提交所做的更改,但不会使用还原的更改创建任何新的提交。还原仅修改工作树和索引 注:使用1.7.4+ 所以我们有类似于
A -> a1 -> a2 -> B <= master
\
x -> y -> z <= somebranch
然后推
现在,在您可以再次合并某个分支之前,您必须像最初一样重新设置它的基础。这是可行的,但你最终会在大师的历史中留下一些噪音
如果有有限数量的人看到和/或承诺过孩子,你可以与他们协调,这是可以避免的,但这需要大量的工作。
如果可能的话,您必须确保他们正在处理的所有内容都已提交并推送,然后您可以重新设置此基础:
A -> ... -> B -------------> C -> c1 -> c2 -> D <= master
\ /
x' -> y' -> z' <= somebranch
其他所有人现在都必须更新到新的头部D',例如:
git fetch
git checkout master
git reset --hard origin/master
请注意,如果任何人的本地提交仍然依赖于C,并且在重新设置基址时在c1..D链中不可见,那么他们将需要重新设置基址或将其挑选到新的历史记录中。这可能是大量容易出错的工作,因此最好尽可能避免
所以我们有类似于
A -> a1 -> a2 -> B <= master
\
x -> y -> z <= somebranch
然后推
现在,在您可以再次合并某个分支之前,您必须像最初一样重新设置它的基础。这是可行的,但你最终会在大师的历史中留下一些噪音
如果有有限数量的人看到和/或承诺过孩子,你可以与他们协调,这是可以避免的,但这需要大量的工作。
如果可能的话,您必须确保他们正在处理的所有内容都已提交并推送,然后您可以重新设置此基础:
A -> ... -> B -------------> C -> c1 -> c2 -> D <= master
\ /
x' -> y' -> z' <= somebranch
其他所有人现在都必须更新到新的头部D',例如:
git fetch
git checkout master
git reset --hard origin/master
请注意,如果任何人的本地提交仍然依赖于C,并且在重新设置基址时在c1..D链中不可见,那么他们将需要重新设置基址或将其挑选到新的历史记录中。这可能是大量容易出错的工作,因此最好尽可能避免。我既不完全理解这个问题,也不了解它与恢复的关系。请将恢复视为删除,而不是git revert命令。我只需要删除在master的分支中所做的更改。但我很确定它与git revert有关,为什么不将master重置为功能分支的重基/合并之前的位置?因为其他人也会推动master,并且在将要移除的内容上有很多更改。顺便说一句,您在一段时间前推动的事实与解决方案有关-您可以将其有效地添加到问题。我既不完全理解这个问题,也不了解它与恢复的关系。请将恢复视为删除,而不是git revert命令。我只需要删除在master的分支中所做的更改。但我很确定它与git revert有关,为什么不将master重置到特性分支的重基/合并之前的位置呢?因为其他人也会推动master,而且在g
要被删除顺便说一句,你在一段时间前推动的事实与解决方案相关-你可以将它添加到问题中。我所说的更改是旧的,并且是在一段时间前推动的,在Master中,它上面有许多提交。在这种情况下,它可能会变得混乱。在我的脑海中,我建议1在有问题的合并之前在提交时创建一个新分支,2在合并到新分支上之后选择所有内容,3声明您的新主节点。当然,这会产生上游影响,因为它已经被推送了,但这可能是消除一个合并提交的最直接的方法…我所说的更改很旧,并且是在一段时间前推送的,在Master中,在它上面有许多提交。在这种情况下,它可能会变得混乱。在我的脑海中,我建议1在有问题的合并之前在提交时创建一个新分支,2在合并到新分支上之后选择所有内容,3声明您的新主节点。当然,这会产生上游影响,因为它已经被推送了,但这可能是消除一个合并提交的最直接的方法。。。
git rebase --onto B C c1
git push --force
git fetch
git checkout master
git reset --hard origin/master