如何解决git revert会覆盖其他人所做的任何其他更改吗?
假设我在存储库中进行了一些更改,后来发现我必须恢复到以前的提交状态,但与此同时,其他一些人也在我提交后对存储库进行了更改。
我想还原自己在这段时间内所做的更改,但不还原在同一存储库中工作的其他人所做的更改。在git中有可能吗?
更具体地说,如果在过去3天中,我进行了3次提交:
c1
c2
c3
在同一时间段内,另一位工作人员也进行了2次提交:
c4
c5
我有2个问题:
- 如果我想回到c1之前的状态,是否足以将其还原为c1?那么c2和c3呢?
- 当我恢复到c1时,c4和c5也会受到影响吗?
解决方法
单词 revert 在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
查找分支所指向的先前提交来还原它们)。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。