차이점: 1. 재설정은 지정된 커밋 버전으로의 완전한 롤백이며 커밋 이후의 모든 커밋은 지워지는 반면, 되돌리기는 지정된 커밋의 수정 사항만 취소하고 후속 커밋에는 영향을 주지 않습니다. 2. 재설정을 실행한 후에는 기록이 생성되지 않지만, 되돌리기를 실행한 후에는 기록이 생성됩니다.
이 튜토리얼의 운영 환경: Windows 7 시스템, Git 버전 2.30.0, Dell G3 컴퓨터.
Git은 우리가 일반적으로 사용하는 버전 관리 도구입니다. 우리 팀이 개발 프로젝트를 공동 작업할 때 코드 및 파일의 수정 및 제출로 인해 다양한 충돌이 자주 발생하며, 이로 인해 제품 요구 사항이 자주 변경됩니다. 버전을 롤백하고 커밋 결정을 철회하면 이때 재설정 및 되돌리기 명령이 유용합니다!
Reset과 revert는 둘 다 실행 취소와 롤백의 의미를 가지고 있지만 각각의 장점이 있고 여전히 차이가 매우 큽니다 따라서 어떤 명령을 사용할지는 실제 상황에 따라 결정해야 합니다. 둘 사이의 차이점을 이해하고 올바른 명령을 정확하고 빠르게 사용하여 실제 문제를 해결할 수 있습니다!
下面的例子中,我有3次提交: 初始状态,只有readme一个文件,内容为Creating a new branch is quick. t1提交后状态:只有readme一个文件,内容修改为Creating a new branch is quick 1. t2提交后状态:只有readme一个文件,内容修改为Creating a new branch is quick 1 2. t3提交后状态:新增了test文件.
이 글에서는 git bash를 예로 들어보겠습니다.
먼저 재설정에 대해 이야기해 보겠습니다.
reset, 사용 방법: git Reset --hard commit
, 커밋은 제출 후 생성된 SHA1, 이 명령을 실행하면 코드가 제출 당시의 상태로 완전히 롤백되고 제출 기록을 포함하여 제출 후 작업 준비 영역과 제출 내용이 완전히 지워집니다! git reset --hard commit
,commit是提交后产生的SHA1,执行该命令后,代码会完全回退到本次提交时的状态,工作暂存区以及本次提交后面的提交内容将会被完全清除,包括提交记录!
举例:
原项目,包含一个Readme.txt文件:
文件内容:
此时我将修改文件内容为:
Creating a new branch is quick 1.
进行第一次提交:
提交记录:
提交后的远程仓库目录及文件内容:
没有问题,继续修改文件内容:Creating a new branch is quick 1 2. ,进行第二次提交:
现在我将新增一个test文件,进行第三次提交:
好了,现在产品需求变更了,新增的功能(readme的第二次修改和新增的test文件)不需要了,要求回退到第一次提交“t1”,如果我们选择使用reset:
首先定位到t1的commit,可以从远程仓库提交历史记录中复制,也可以用命令git log
查看:
(小提示,如果最后一行出现“:”,则输入wq退出回到命令行即可!)
复制commit,执行命令:
git reset --hard 8cbf16c0821d20fe42c361f4e3d75a0493dc5fc2
提示,HEAD已经指向了t1,但你刷新后台时,发现并没有什么变化,这是因为我们还需要执行一下push,但这里需要注意的是,因为本地代码回到了旧版本,但远程仓库是新版本和本地不一致,所以你在用git push时会报错,这里我们需要使用强制提交,git push -f
,我们也可以使用git status
예:
🎜Readme.txt 파일을 포함한 원본 프로젝트: 🎜🎜 파일 내용: 🎜git log
명령으로 볼 수 있는 t1의 커밋을 찾습니다. 🎜🎜🎜(팁, 마지막 줄에 ":"가 나타나면 wq를 입력하세요. 종료하고 명령줄로 돌아가려면! )🎜🎜커밋을 복사하고 다음 명령을 실행하세요: 🎜git revert 8cbf16c0821d20fe42c361f4e3d75a0493dc5fc2🎜🎜🎜 Tip. HEAD가 t1을 가리키고 있는데 배경을 새로고침해 보면 변화가 없다는 걸 알 수 있는데, 아직 push를 해야 하기 때문인데 주의할 점이 있습니다. 로컬 코드 때문에 이전 버전으로 돌아갔지만 새 버전의 원격 웨어하우스가 로컬 버전과 일치하지 않아 git push를 사용할 때 오류가 발생합니다. 여기서는 강제 제출을 사용해야 합니다.
git push -f
, git status
를 사용할 수도 있습니다. 현재 상태 보기: 🎜🎜🎜🎜意思是告诉你,远程仓库代码较新,需要你执行 git pull
操作以同步代码,但这并不是我们的需求,所以我们不用理会,执行,git push -f
:
再看仓库:
历史记录只剩下了t1:
readme内容也得到了恢复:
可见,reset是彻彻底底的回退,该commit之后的所有修改将完全消失,包括提交记录。
优点:
缺点:
再说revert:
revert执行后会产生新的commit记录,是通过一次新的commit来恢复到之前旧的commit,但revert会保留恢复的该次提交后面的其它提交内容,假如后面的提交与要恢复的提交更改了同一地方,此时用revert就会产生冲突!
我们继续以上面的例子为例,我重新执行了t2和t3提交,恢复到reset之前的状态:
此时,我们按reset的思路,使用revert恢复到t1,执行命令:
git revert 8cbf16c0821d20fe42c361f4e3d75a0493dc5fc2
报错:
提示冲突了?让我们解决掉冲突后提交…
<<<<<<< HEAD Creating a new branch is quick 1 2. ======= Creating a new branch is quick. >>>>>>> parent of 8cbf16c (t1)
上面的冲突表示,当前的内容是:
Creating a new branch is quick 1 2.
而我们要恢复的内容是:
Creating a new branch is quick.
如果对revert命令没有深入了解的话,就可能会产生疑惑,为什么会冲突?而且我实际上是想像reset一样恢复或者说是回退到t1(这里要再次说明一下t1的状态:只有一个readme文件,且内容是Creating a new branch is quick 1),但为什么冲突提示要恢复到Creating a new branch is quick.???这不是初始状态吗?
其实,准确来说,revert是撤销/撤回/反提交的意思,我们不能按reset的思路理解,我们执行git revert t1
,这么做其实结果是要撤销t1的提交,注意,仅仅是撤销t1的提交,把t1的修改恢复到t1之前也就是初始的状态,而不会影响t2,t3的提交。但如果t2,t3中修改了t1修改的同一地方,那么就会产生冲突,因为revert意图撤销t1的修改,但发现t2和t3把t1的修改再次修改了,此时,revert意图变得不清晰,因为它无法确定到底是应用你最新的修改,还是恢复到初始状态,这将由你来决定!
所以我们想要恢复t1的状态,那我们就应该撤销t2对t1的修改git revert t2
:
git revert fc4889dcb327cff9f8078db6a0d5c601b8e91ae9
执行后会自动进入编辑界面:
这里需要我们修改或输入提交日志,按 “i”,进入输入状态,写完后按ESC退出输入状态,再按“:wq”退出!
成功后,执行 git push:
查看仓库后台:
项目目录:
readme内容:
可见,revert操作成功后,产生了新的commit记录,t2对t1的修改已经恢复,现在的readme就是t1提交后的状态,但同时test文件仍然存在,即t3的提交不受影响!
하지만 재설정처럼 t2t3의 제출물을 삭제하고 싶다면 먼저 t3를 되돌린 다음 t2를 되돌리면 동일한 효과를 얻을 수 있습니다. 하지만 이 경우 그냥 재설정을 사용하면 어떨까요? 리셋 효과도 얻고 싶고, 후회하지 않는 기록도 갖고 싶다면, 바로 이것입니다. . . 생각해 볼 만한 질문이에요!
git Reset과 revert의 차이점 요약:
Tips: IDEA 개발 도구에서 파일을 선택하고 git 옵션을 마우스 오른쪽 버튼으로 클릭하면 Rollback이 표시됩니다.
이는 재설정 및 되돌리기와 구별되어야 합니다. 롤백은 다음에 속하지 않습니다. git 명령의 기능은 파일이나 코드가 수정되었지만 아직 커밋되지 않은 후 이를 원격 웨어하우스 코드와 일치하는 상태로 복원하려는 경우 롤백 작업을 수행할 수 있다는 것입니다. !
추천 학습: "
위 내용은 git에서 재설정과 되돌리기의 차이점은 무엇입니까의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!