Git软重置的结果

  • 本文关键字:结果 Git git
  • 更新时间 :
  • 英文 :


我希望有人能帮我,因为我对git还很陌生。假设我在主分支上有以下合并的PR:A->B->C->D->E-F

我需要把它恢复到提交C时的状态,因为D E F有需要修复的问题。因此,我对另一个分支进行软重置,使其返回C(恢复D、E、F(,然后将该分支合并回main。现在我已经提交了G,它还原了D、E和F。A->B->C->D->E-F->G

两个问题:

  1. 其他人现在可以轻松地从main分支,完成他们的工作并毫无问题地合并回来吗
  2. 我该如何着手修复错误的提交D E F?我应该像现在一样创建一个新的分支并重做所有更改吗

感谢您的帮助。

很多事情。首先,图表应该是A<-B<-C...,因为在git中,孩子们的修订指向他们的父母,而不是相反。然后,如果您进行了软重置(git checkout F; git reset --soft C; git commit -m "reverting"(,则这是不正确的。你最终会在C之后得到一个版本,该版本具有与F相同的内容,这不是你想要的,对吧?

也许你想做的是:

git checkout C
git reset --soft F
git commit -m "Reverting to C" 
# this revision we just created has the content of C and its parent is F....
# in other words, it reverts changes introduced by D, E and F
# feel free to set a branch over here push and merge

要点问题。

1-是。一般规则是,如果您不重写分支的历史,人们应该能够在分支上继续工作。当人们开始重写共享分支时,事情就会变得一团糟。当然这意味着人们不会处理与D、E和F有关的事情。如果与这些修订有关,那么考虑到你要收回这些更改,冲突预计会在以后发生。

2-让我们假设它们中的每一个都是自己的一个功能,并且是否依赖于其他2个损坏的修订。。。。你想从第一次修订开始工作。。。。所以,假设我想研究E:

git checkout -b branchE E # create a feature branch on E
git commit --amend --no-edit # make git believe that this is something that has not been merged yet
git rebase master # rebase on top of master
# now you can continue working so that you get the change working correctly on this branch
.
.
# when you are done with it, push and create a PR and merge.

最新更新