>  기사  >  개발 도구  >  git에서 재설정과 되돌리기의 차이점은 무엇입니까

git에서 재설정과 되돌리기의 차이점은 무엇입니까

青灯夜游
青灯夜游원래의
2021-11-30 14:57:2525808검색

차이점: 1. 재설정은 지정된 커밋 버전으로의 완전한 롤백이며 커밋 이후의 모든 커밋은 지워지는 반면, 되돌리기는 지정된 커밋의 수정 사항만 취소하고 후속 커밋에는 영향을 주지 않습니다. 2. 재설정을 실행한 후에는 기록이 생성되지 않지만, 되돌리기를 실행한 후에는 기록이 생성됩니다.

git에서 재설정과 되돌리기의 차이점은 무엇입니까

이 튜토리얼의 운영 환경: 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를 예로 들어보겠습니다.

git에서 재설정과 되돌리기의 차이점은 무엇입니까
먼저 재설정에 대해 이야기해 보겠습니다.

reset, 사용 방법: git Reset --hard commit, 커밋은 제출 후 생성된 SHA1, 이 명령을 실행하면 코드가 제출 당시의 상태로 완전히 롤백되고 제출 기록을 포함하여 제출 후 작업 준비 영역과 제출 내용이 완전히 지워집니다! git reset --hard commit ,commit是提交后产生的SHA1,执行该命令后,代码会完全回退到本次提交时的状态,工作暂存区以及本次提交后面的提交内容将会被完全清除,包括提交记录!

举例:

原项目,包含一个Readme.txt文件:
git에서 재설정과 되돌리기의 차이점은 무엇입니까
文件内容:
git에서 재설정과 되돌리기의 차이점은 무엇입니까
此时我将修改文件内容为:

Creating a new branch is quick 1.

进行第一次提交
git에서 재설정과 되돌리기의 차이점은 무엇입니까
提交记录:
git에서 재설정과 되돌리기의 차이점은 무엇입니까
提交后的远程仓库目录及文件内容:

git에서 재설정과 되돌리기의 차이점은 무엇입니까git에서 재설정과 되돌리기의 차이점은 무엇입니까
没有问题,继续修改文件内容:Creating a new branch is quick 1 2. ,进行第二次提交
git에서 재설정과 되돌리기의 차이점은 무엇입니까
现在我将新增一个test文件,进行第三次提交
git에서 재설정과 되돌리기의 차이점은 무엇입니까
git에서 재설정과 되돌리기의 차이점은 무엇입니까git에서 재설정과 되돌리기의 차이점은 무엇입니까

好了,现在产品需求变更了,新增的功能(readme的第二次修改和新增的test文件)不需要了,要求回退到第一次提交“t1”,如果我们选择使用reset:

首先定位到t1的commit,可以从远程仓库提交历史记录中复制,也可以用命令git log查看:

git에서 재설정과 되돌리기의 차이점은 무엇입니까
(小提示,如果最后一行出现“:”,则输入wq退出回到命令行即可!)

复制commit,执行命令:

git reset --hard 8cbf16c0821d20fe42c361f4e3d75a0493dc5fc2

git에서 재설정과 되돌리기의 차이점은 무엇입니까

提示,HEAD已经指向了t1,但你刷新后台时,发现并没有什么变化,这是因为我们还需要执行一下push,但这里需要注意的是,因为本地代码回到了旧版本,但远程仓库是新版本和本地不一致,所以你在用git push时会报错,这里我们需要使用强制提交,git push -f,我们也可以使用git status

예: git에서 재설정과 되돌리기의 차이점은 무엇입니까

🎜Readme.txt 파일을 포함한 원본 프로젝트: 🎜여기에 이미지 설명 삽입🎜 파일 내용: 🎜🎜 이제 파일 내용을 다음과 같이 수정하겠습니다: 🎜🎜🎜새 브랜치를 만드는 것이 빠릅니다 1.🎜🎜🎜 🎜 첫 번째 제출🎜 만들기: 🎜여기에 이미지 설명 삽입🎜 제출 기록: 🎜여기에 이미지 설명 삽입🎜 제출 후 원격 웨어하우스 디렉터리 및 파일 콘텐츠: 🎜🎜 여기에 이미지 설명 삽입여기에 이미지 설명 삽입🎜 문제 없습니다. 파일 내용을 계속 수정하세요.🎜새 브랜치를 만드는 것이 빠릅니다 1 2.🎜, 🎜두 번째 커밋🎜 만들기: 🎜삽입 이미지 설명은 여기에🎜 이제 테스트 파일을 추가하고 🎜세 번째 제출🎜을 작성하겠습니다. 🎜여기에 이미지 설명 삽입🎜삽입 여기에 이미지 설명 삽입git에서 재설정과 되돌리기의 차이점은 무엇입니까🎜🎜 좋습니다. 이제 제품 요구 사항이 변경되어 새로운 기능(readme의 두 번째 수정 및 새 테스트 파일)이 더 이상 필요하지 않으며 원하는 경우 첫 번째 제출로 돌아가야 합니다. 재설정 사용: 🎜🎜먼저 원격 웨어하우스 커밋 기록에서 복사하거나 git log 명령으로 볼 수 있는 t1의 커밋을 찾습니다. 🎜🎜여기에 이미지 설명 삽입🎜(팁, 마지막 줄에 ":"가 나타나면 wq를 입력하세요. 종료하고 명령줄로 돌아가려면! )🎜🎜커밋을 복사하고 다음 명령을 실행하세요: 🎜
git revert 8cbf16c0821d20fe42c361f4e3d75a0493dc5fc2
🎜 여기에 그림 설명 삽입 🎜🎜 Tip. HEAD가 t1을 가리키고 있는데 배경을 새로고침해 보면 변화가 없다는 걸 알 수 있는데, 아직 push를 해야 하기 때문인데 주의할 점이 있습니다. 로컬 코드 때문에 이전 버전으로 돌아갔지만 새 버전의 원격 웨어하우스가 로컬 버전과 일치하지 않아 git push를 사용할 때 오류가 발생합니다. 여기서는 강제 제출을 사용해야 합니다. git push -f, git status를 사용할 수도 있습니다. 현재 상태 보기: 🎜🎜🎜🎜

意思是告诉你,远程仓库代码较新,需要你执行 git pull操作以同步代码,但这并不是我们的需求,所以我们不用理会,执行,git push -f

![git에서 재설정과 되돌리기의 차이점은 무엇입니까](https://img-blog.csdnimg.cn/94c3e93f6efe40b6a4d12d02eb05cd4d.png

再看仓库:

git에서 재설정과 되돌리기의 차이점은 무엇입니까

历史记录只剩下了t1:

git에서 재설정과 되돌리기의 차이점은 무엇입니까

readme内容也得到了恢复:

git에서 재설정과 되돌리기의 차이점은 무엇입니까

可见,reset是彻彻底底的回退,该commit之后的所有修改将完全消失,包括提交记录。

优点

  • 彻底回退到指定版本,干净清爽;
  • 提交时间线清晰,没有冗杂;

缺点

  • 记录彻底清除,无法再次恢复;

再说revert

revert执行后会产生新的commit记录,是通过一次新的commit来恢复到之前旧的commit,但revert会保留恢复的该次提交后面的其它提交内容,假如后面的提交与要恢复的提交更改了同一地方,此时用revert就会产生冲突!

我们继续以上面的例子为例,我重新执行了t2和t3提交,恢复到reset之前的状态:

git에서 재설정과 되돌리기의 차이점은 무엇입니까
git에서 재설정과 되돌리기의 차이점은 무엇입니까
此时,我们按reset的思路,使用revert恢复到t1,执行命令:

git revert 8cbf16c0821d20fe42c361f4e3d75a0493dc5fc2

报错:

git에서 재설정과 되돌리기의 차이점은 무엇입니까
提示冲突了?让我们解决掉冲突后提交…

<<<<<<< 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

执行后会自动进入编辑界面:

git에서 재설정과 되돌리기의 차이점은 무엇입니까

这里需要我们修改或输入提交日志,按 “i”,进入输入状态,写完后按ESC退出输入状态,再按“:wq”退出!

成功后,执行 git push:

git에서 재설정과 되돌리기의 차이점은 무엇입니까

查看仓库后台:

git에서 재설정과 되돌리기의 차이점은 무엇입니까

项目目录:

git에서 재설정과 되돌리기의 차이점은 무엇입니까

readme内容:

git에서 재설정과 되돌리기의 차이점은 무엇입니까

可见,revert操作成功后,产生了新的commit记录,t2对t1的修改已经恢复,现在的readme就是t1提交后的状态,但同时test文件仍然存在,即t3的提交不受影响!

하지만 재설정처럼 t2t3의 제출물을 삭제하고 싶다면 먼저 t3를 되돌린 다음 t2를 되돌리면 동일한 효과를 얻을 수 있습니다. 하지만 이 경우 그냥 재설정을 사용하면 어떨까요? 리셋 효과도 얻고 싶고, 후회하지 않는 기록도 갖고 싶다면, 바로 이것입니다. . . 생각해 볼 만한 질문이에요!

git Reset과 revert의 차이점 요약:

  • reset은 지정된 커밋 버전으로의 완전한 롤백이며 커밋 기록을 포함하여 커밋 이후의 모든 커밋이 지워집니다. a revocation 지정된 커밋의 수정은 후속 커밋에 영향을 미치지 않지만 취소된 커밋이 후속 커밋에 의해 동일한 위치에서 수정되면 충돌이 발생합니다.
  • Reset은 실행 후 레코드를 생성하지 않지만 revert는 실행 후 레코드를 생성합니다.
  • reset 실행 후에는 복원할 수 없습니다. 되돌리기를 실행한 후에는 기록이 지워지지 않고 새 기록이 생성되므로 파일이 손실되지 않습니다. 되돌리기를 여러 번 실행하면 이전 상태로 복원할 수 있습니다. 특정 변경 사항;
  • HEAD는 재설정 이동 실행 후 재설정되지만 되돌리기의 HEAD는 항상 앞으로
  • 재설정 및 되돌리기의 기본 원칙을 명확히 한 후에는 어떤 명령을 사용하는 것이 더 적합한지 이해하게 됩니다. 몇시에!

Tips: IDEA 개발 도구에서 파일을 선택하고 git 옵션을 마우스 오른쪽 버튼으로 클릭하면 Rollback이 표시됩니다.

이는 재설정 및 되돌리기와 구별되어야 합니다. 롤백은 다음에 속하지 않습니다. git 명령의 기능은 파일이나 코드가 수정되었지만 아직 커밋되지 않은 후 이를 원격 웨어하우스 코드와 일치하는 상태로 복원하려는 경우 롤백 작업을 수행할 수 있다는 것입니다. ! git에서 재설정과 되돌리기의 차이점은 무엇입니까
추천 학습: "

Git Tutorial

"

위 내용은 git에서 재설정과 되돌리기의 차이점은 무엇입니까의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.