git revert会覆盖其他人所做的任何其他更改吗?

时间:2020-08-11 20:31:33

标签: git

假设我在存储库中进行了一些更改,后来发现我必须恢复到以前的提交状态,但与此同时,其他一些人也在我提交后对存储库进行了更改。

我想还原自己在这段时间内所做的更改,但不还原在同一存储库中工作的其他人所做的更改。在git中有可能吗?

更具体地说,如果在过去3天中,我进行了3次提交:

c1
c2
c3

在同一时间段内,另一位工作人员也进行了2次提交:

c4
c5

我有2个问题:

  1. 如果我想回到c1之前的状态,是否足以将其还原为c1?那么c2和c3呢?
  2. 当我恢复到c1时,c4和c5也会受到影响吗?

3 个答案:

答案 0 :(得分:1)

单词 revert 在git中具有特定含义。这意味着创建一个与另一个提交相反的提交。

返回历史记录中的上一次提交称为重置

关于还原,如果您现在有序列:

c1
c2
c3
c4
c5

,然后还原前三个提交(使用git revert),以相反的顺序更好,最后得到:

c1
c2
c3
c4
c5
-c3
-c2
-c1

这应该差不多等于c4c5的工作,但要保留整个故事。

如果您想真正删除您的提交,则必须重写分支。 rebasepush --force的一般警告适用(即不建议共享)。有几种方法可以做到这一点。最简单的方法可能是执行git rebase --interactive c1^并删除有问题的提交。然后push -f,并确保团队中的每个人都已正确同步。

答案 1 :(得分:1)

git revert可以简单地反转指定提交中的补丁。如果不能完全应用反向补丁,则git将为您提供解决冲突的机会,类似于mergerebase产生冲突时。

答案 2 :(得分:1)

由于您在Git中描述称为“分支重置”的过程时使用了“还原”一词,因此不清楚要达到的目标。

如果您通过说git revert C1来还原一个提交(例如C1),则其他提交(C2,C3 ...)将不会受到影响,因为只有该更改将被“不应用”。 Git将为您创建一个“反提交”(我们将其称为C6)。但是,如果要将分支重置为C1(git reset C1),则将有效地丢弃C2..C5。但是,它们将一直存在,直到Git稍后将其垃圾回收(您可以使用git reflog查找分支所指向的先前提交来还原它们)。

相关问题