假设我在存储库中进行了一些更改,后来发现我必须恢复到以前的提交状态,但与此同时,其他一些人也在我提交后对存储库进行了更改。
我想还原我自己在这段时间内所做的更改,但不想还原在同一存储库中工作的其他人。这可能是吉特吗?
更具体地说,如果在过去的3天里,我进行了3次提交:
c1
c2
c3
在同一时间段内,另一个工作人员也进行了2次提交:
c4
c5
我有两个问题:
- 如果我想回到c1之前的状态,是否足以将其恢复到c1?c2和c3呢
- 当我恢复到c1时,c4&c5也受到影响
单词rever在git中有特定的含义。它意味着创建一个与另一个提交相反的提交。
返回历史上的上一次提交称为重置。
关于还原,如果你现在有序列:
c1
c2
c3
c4
c5
如果您恢复前三次提交(使用git revert
(,最好按照相反的顺序,您最终会得到:
c1
c2
c3
c4
c5
-c3
-c2
-c1
这应该或多或少相当于c4
和c5
的工作,但保留了整个故事。
如果您想真正删除提交,则必须重写分支。rebase
和push --force
的常见注意事项适用(即,如果共享,则不推荐使用(。有几种方法可以做到这一点。最简单的方法可能是执行git rebase --interactive c1^
并删除有问题的提交。然后是push -f
,并确保团队中的每个人都正确同步。
git revert
只需反转指定提交中的修补程序。如果反向补丁不能干净地应用,git将为您提供解决冲突的机会,类似于merge
或rebase
产生冲突的情况。
从你的问题中不清楚你想要实现什么,因为你使用了术语";恢复";同时描述称为";分支复位";在Git中。
如果您通过说git revert C1
来恢复一个提交(例如,C1(,则其他提交(C2、C3…(将不会受到影响,因为只有该更改才会被"恢复";未应用";。Git将创建一个";"反提交";给你(我们称之为C6(。但是,如果要将分支重置为C1(git reset C1
(,则会有效地丢弃C2..C5。然而,它们仍然存在,直到Git稍后垃圾收集它们(并且您可以通过使用git reflog
查找分支指向的以前的提交来在完成之前恢复它们(。