sourcetip

Git Revert, Checkout 및 Reset의 차이점은 무엇입니까?

fileupload 2023. 5. 8. 22:24
반응형

Git Revert, Checkout 및 Reset의 차이점은 무엇입니까?

파일 및 프로젝트를 이전 상태로 복원하거나 롤백하는 방법을 배우려고 하는데 다음과 같은 방법이 있는지 모르겠습니다.git revert,checkout,그리고.reset동일한 목적으로 보이는 3가지 명령어가 있는 이유는 무엇이며, 언제 다른 명령어보다 하나를 선택해야 합니까?

이 세 가지 명령은 용도가 완전히 다릅니다.그들은 조금도 닮지 않았습니다.

git revert

이 명령은 이전 커밋의 변경 내용을 실행 취소하는 새 커밋을 만듭니다.이 명령은 프로젝트에 새 기록을 추가합니다(기존 기록은 수정하지 않음).

git checkout

이 명령은 리포지토리에서 내용을 체크아웃하고 작업 트리에 넣습니다.또한 명령이 실행된 방법에 따라 다른 효과가 있을 수 있습니다.예를 들어, 현재 작업 중인 분기도 변경할 수 있습니다.이 명령은 기록을 변경하지 않습니다.

git reset

이 명령은 조금 더 복잡합니다.그것은 실제로 어떻게 작동하는지에 따라 몇 가지 다른 일을 합니다.인덱스("스테이지 영역"이라고 함)를 수정합니다.또는 분기 헤드가 현재 가리키는 커밋을 변경합니다.이 명령은 분기에서 참조하는 커밋을 변경하여 기존 기록을 변경할 수 있습니다.

다음 명령 사용

프로젝트 기록의 어딘가에서 커밋이 이루어졌는데 나중에 커밋이 잘못되어 수행되지 말았어야 했다고 판단하는 경우,git revert작업을 위한 도구입니다.잘못된 커밋에 의해 도입된 변경 사항을 취소하고 기록에 "실행 취소"를 기록합니다.

트리에서 않은 에는 작업트서파수변만커경않내우를 사용할 수 .git checkout저장소에서 새로 가져온 파일 복사본을 체크아웃합니다.

약속을 않는다고 한다면, 은 약을했지다사른공않다않원결있수사니경습용할다속음을우한을 사용할 수 .git reset역사를 다시 써서 마치 당신이 그런 약속을 한 적이 없는 것처럼 보이게 하는 것.

다음은 가능한 사용 시나리오 중 일부에 불과합니다.일부 상황에서 유용한 다른 명령이 있으며 위의 세 가지 명령에도 다른 용도가 있습니다.

커밋이 있었다고 가정해 보겠습니다.

C
B
A

git revert B의 변경 내용을 취소하는 커밋을 만듭니다.B.

git revert A의 변경 내용을 취소하는 커밋을 만듭니다.A하지만 변경 사항은 언급하지 않을 것입니다.B

에서 된 경우 B는 의변에 달니다집라따라화의 달라집니다.AA불가능합니다.

git reset --soft A 및합니다. 및 " " " 입니다. 스테이징 및 작업 디렉터리는 여전히 의 상태입니다.C.

git reset --mixed A 기록,스테이징을 합니다. " " ", " " 로 유지됩니다. 작업 디렉토리는 여전히 의 상태입니다.C.

git reset --hard A 기록, 및 디렉터리를 합니다. 커밋기, 토리및를변, 스징디리니다경다. 상태로 .A완전히.

  • git revert이전 커밋을 실행 취소하는 데 사용됩니다.Git서는이 전변경하거나지울수다없니습을밋커 (할 수 있지만를 일으킬 수 .)(실제로는 가능하지만 문제가 발생할 수 있습니다.)따라서 revert는 이전 커밋을 편집하는 대신 이전 커밋을 되돌리는 새 커밋을 도입합니다.
  • git reset아직 커밋되지 않은 작업 디렉터리의 변경 내용을 실행 취소하는 데 사용됩니다.
  • git checkout다른 커밋에서 현재 작업 트리로 파일을 복사하는 데 사용됩니다.파일을 자동으로 커밋하지 않습니다.
  • git checkout 트리인 "작업트리수정니다를 합니다.
  • git reset합니다.
  • git revert변경 내용을 취소하는 커밋을 추가합니다.

재설정 - 커밋 수준에서 재설정은 분기의 끝을 다른 커밋으로 이동하는 방법입니다.현재 분기에서 커밋을 제거하는 데 사용할 수 있습니다.

되돌리기 - 되돌리면 새 커밋을 만들어 커밋이 실행 취소됩니다.이 방법은 커밋 기록을 다시 쓸 가능성이 없으므로 변경 내용을 실행 취소하는 안전한 방법입니다.기존 커밋 기록을 변경하는 깃 재설정과 비교합니다.이러한 이유로 Git revert는 공용 분기의 변경 내용을 실행 취소하는 데 사용되어야 하며 Git reset은 전용 분기의 변경 내용을 실행 취소하는 데 예약되어야 합니다.

재설정, 체크아웃 및 되돌리기 링크를 볼 수 있습니다.

제가 질문에 답하도록 노력하겠습니다.git restore에 덧붙임

다음과 같은 커밋 기록이 있다고 가정합니다.

D
C
B
A

git revert:

역커밋을 수행합니다. git revert commit-hash로 커밋된 사항을 새 .

git revert B의 변경 내용을 취소하는 커밋을 만듭니다.BGit history 포스트 그것은 될 것입니다.

reverse-B
D
C
B
A

commit 밋경우.C커밋에 .B git revert B합니다.

제안:git revert공개 커밋을 되돌리도록 설계되었습니다.변경 내용을 실행 취소하는 다른 모든 방법은 프로젝트의 다른 참가자와 문제를 일으킬 수 있는 커밋 기록을 변경할 수 있습니다. git revert 내용을 입니다.

git restore:

git restorecommit하는 데 .

명령어는 git restore [--source=commit-message] [--worktree] [--filename] [--] 파일입니다.

  • --워크트리는 워크트리로 복원하는 것을 의미합니다.
  • --vmdk는 --vmdk로 복원하는 것을 의미합니다.
  • --source와 staging-area 모두를 지정하여 --source에서 --source와 staging-area로 복원합니다.
  • --source가 지정된 경우 복원은 항상 소스에서 수행됩니다.
  • --source가 지정되지 않고 --staged가 HEAD에서 복원된 경우
  • --source 또는 --source 둘 다 지정되지 않은 경우 복원은 준비 영역에서 작업 트리로 이동합니다.

-하기 - 사용하기git restore에서

  • 준비 영역 및/또는 작업 트리에 BLOB를 커밋합니다.
  • 준비 영역 - 작업 트리

git checkout commit-hash:

수의구있주오시십의하지만현이의 파일 레벨 이 있지만 .git checkout준비 영역 또는 작업 트리에 커밋된 파일을 끌어오는 데 도움이 됩니다. 이제 그것은 팀의 책임이기 때문에 논의하지 않을 것입니다.git restore명령과 그것은 정확하게 셔터를 내리고 일관성 있게 만들기 위해 설계되었습니다.git checkout지휘권

  • git checkout commit-hash헤드가 커밋 해시를 가리키도록 이동됩니다.항상 분리된 헤드 상태로 유지됩니다.
  • git checkout branch. 이 상태는 다음과 같습니다.

제안:사용하다git checkout합니다.

git reset commit-hash:

  • 은 머리가 분리된였습니다 - 머가분상태군요였된리리요군▁you▁-상였▁state태.git reset이동할 것입니다.HEAD된 지된범까지commit-hash.같은git checkout commit-hash
  • 가 분리된 - 머가분상아니었요군태가리된리요.git reset전체를 이동시킬 것입니다.(HEAD -> branch)된 지된범까지commit-hash이것이 결과적으로commits에서 해당 합니다.

git reset 세 옵션이 .--soft,--mixed,--hard 영역?HEAD다른 약속으로?

  • --hard 이동한 새합니다.
  • --mixed - 로 유지됩니다(으) - 작업트실전유지다니상됩태로의행기하.git reset한 새 커밋의 합니다.
  • --soft로 유지됩니다.git reset

git reset대부분의 부분은 다음의 조합을 사용하여 복제할 수 있습니다.git checkout,git branch -D그리고.git restore reset을를 제외하고 및 할 수 는, 다음과 같습니다.

제안: 이루어져서는 안 되는 몇 가지 커밋을 했고 공공 보고서에 변경 사항을 적용하지 않았습니까?이러한 커밋이 존재하지 않는 것처럼 하는 것이 최선입니까?사용하다git reset앞서 설명한 대로 공용 보고서에 변경 사항을 적용한 경우 사용할 수 있습니다.git revert

트를깼코커않경은우지하를 사용할 수 .git reset파일 하려면 파일하복려다면사수용있다습니할음을원하나만을 사용하면 .git checkout.

트를부코커드경밋수있사다습니용할다을음리우를 사용할 수.git revert HEAD.

http://book.git-scm.com/4_undoing_in_git_-_reset,_checkout_and_revert.html

언급URL : https://stackoverflow.com/questions/8358035/whats-the-difference-between-git-revert-checkout-and-reset

반응형