마지막 커밋을 git 실행 취소하는 방법

마지막 커밋을 git 실행 취소하는 방법

소프트웨어 엔지니어 또는 웹 개발자로서 우리는 Git 저장소에 많은 커밋을 푸시해야 할 수도 있습니다.

그러나 Git 저장소에 푸시되지 않을 파일을 커밋하려는 다른 경우도 있습니다. 커밋을 실행하기 전에 때때로 몇 가지 추가 변경 사항을 구현하고 싶을 수도 있습니다.

결과적으로 Git 저장소를 통해 마지막 커밋을 실행 취소해야 합니다. 이 주제에서는 마지막 커밋을 실행 취소하는 방법을 살펴보겠습니다.

재설정과 함께 마지막 Git 커밋 실행 취소

다음 명령을 실행하여 마지막 git 커밋을 쉽게 실행 취소할 수 있습니다. 'git 재설정' 옵션과 함께, 즉 '-부드러운' 그러면 파일에 대한 모든 변경 사항이 보호됩니다. 실행 취소할 커밋인 'HEAD~1'을 설명해야 합니다.

Git의 마지막 커밋이 Git 저장소에서 삭제됩니다.

 $ git reset --soft HEAD~1  

이 표기법에서,

'헤드~1': 이는 로그 기록 내부에 들어가기 전에 이 HEAD를 단일 커밋으로 재설정하고자 함을 의미합니다.

 $ git log --oneline 3fad532 Last commit (HEAD) 3bnaj03 Commit before HEAD (HEAD~1) Vcn3ed5 Two commits before HEAD (HEAD~2)  

위 명령의 효과는 무엇입니까?

명령, 즉 'git 재설정' 즉, 명령과 반대되는 명령으로 볼 수 있습니다. 'git 추가' , 기본적으로 Git 인덱스에 파일을 삽입합니다.

옵션을 설명하면 '-부드러운' , Git은 인덱스 또는 실행 디렉터리 내의 파일을 전혀 변경하지 않습니다.

예를 들어, 이 파일에 몇 가지 변경 사항을 구현하고 싶지만 최근 커밋에 두 개의 파일을 포함했습니다.

 $ git log --oneline --graph *b734307 (HEAD -> master) Added a new file named 'file1' *90f8bb1 Second commit *7083e29 Initial repository commit  

결과적으로 신청하겠습니다. 'git 재설정' 옵션과 함께 '-부드러운' 마지막 커밋을 취소하고 몇 가지 추가 변경 사항을 구현합니다.

 $ git reset --soft HEAD~1 $ git status  

지점 마스터를 통해

우리 브랜치는 커밋 1보다 ​​먼저 마스터/오리진입니다(로컬 커밋을 게시하려면 'git push'를 적용하세요).

커밋할 수정 사항:

 (apply 'git restore --staged …' to unstage)  

새 파일: file1

 $ git log --oneline --graph *90f8bb1 (Head -> master) Second commit *7083e29 Initial repository commit  

보시다시피, 커밋이 삭제되었더라도 마지막 커밋(커밋할 수정 사항)을 실행 취소하여 파일은 여전히 ​​인덱스에 있습니다.

저장소에서 마지막 커밋을 성공적으로 완료했습니다.

하드 리셋 Git 커밋

위 섹션에서 우리가 쉽게 생각할 수 있는 것은 마지막 커밋을 취소하고 수정 사항을 유지합니다. 인덱스 내부의 모든 파일에 수행됩니다. 그러나 어떤 상황에서는 단순히 파일에 대한 변경 사항과 커밋을 제거하고 싶을 수도 있습니다.

이는 옵션의 목적입니다. 즉, '-딱딱한' .

마지막 커밋을 실행 취소하고 인덱스와 디렉터리 내의 모든 수정 사항을 제거하려면 다음 명령을 실행합니다. 'git 재설정' 옵션과 함께, 즉 '-딱딱한' HEAD 명령 이전에 커밋을 설명합니다. ('헤드~1') .

 $ git reset --hard HEAD~1  

모든 커밋과 수정 사항은 다음을 사용한 후 인덱스와 디렉터리에서 제거됩니다. '--딱딱한' 명령. 그러므로 우리는 조심해야 합니다.

예를 들어 'file1'이라는 새 파일을 Git 저장소에 커밋했습니다.

 $ git log --oneline --graph *b734307 (HEAD -> master) Added a new file named 'file1' *90f8bb1 (Head -> master) Second commit *7083e29 Initial repository commit  

이제 마지막 커밋을 취소하고 모든 변경 사항을 제거한다고 가정합니다.

 $ git reset --hard HEAD~1  

이제 HEAD는 90f8bb1 두 번째 커밋에 있습니다.

이제 git 저장소 상태를 확인해 보겠습니다.

 $ git status  

지점 마스터를 통해

우리 브랜치는 마스터/오리진과 현대적입니다(로컬 커밋을 게시하려면 'git push' 명령을 적용하세요).

이제 커밋할 일이 없으며 작업 트리가 깨끗해졌습니다.

혼합 재설정 Git 커밋

그러나 인덱스가 아닌 작업 디렉토리 내에서 수정 사항을 유지하십시오. 우리는 명령을 적용해야 합니다. ., 'git 재설정' 옵션과 함께, 즉 '-혼합' . 이 명령 뒤에는 마지막 커밋에 'HEAD~1'을 추가하면 됩니다.

 $ git reset --mixed HEAD~1  

예를 들어, 실행 취소가 필요한 커밋 내에 'file1'이라는 파일을 포함했습니다.

 $ git log --oneline --graph *b734307 (HEAD -> master) Added a new file named 'file1' *90f8bb1 (Head -> master) Second commit *7083e29 Initial repository commit  

간단히 말해서, 우리는 명령을 실행합니다. 즉, 'git 재설정' 옵션과 함께, 즉 '-혼합' 마지막 커밋을 취소합니다.

그 결과, '-혼합' 명령은 '혼합' 하드 리셋과 소프트 리셋 중에서 이름이 붙여졌습니다.

지점 마스터를 통해

우리 브랜치는 커밋 1보다 ​​먼저 마스터/오리진입니다(로컬 커밋을 게시하려면 'git push'를 적용하세요).

추적되지 않은 파일: (커밋할 내용을 추가하려면 'git add …'를 적용하세요)

 file1  

커밋에는 아무것도 포함되지 않았지만 추적되지 않은 파일이 있습니다(추적을 위해 'git track' 적용).

따라서 우리는 파일에 대한 수정 사항을 보존하여 마지막 커밋을 되돌리는 또 다른 방법을 발견했습니다.

되돌리기와 함께 마지막 커밋 실행 취소

명령을 적용합니다. 즉, 'git 되돌리기' 되돌릴 커밋을 설명합니다. 즉, '머리' 마지막 Git 커밋을 되돌리기 위해 기록 커밋으로 이동합니다.

 $ git revert HEAD  

'git revert' 명령은 마지막 커밋을 퇴화하여 정의된 일부 수정 사항과 함께 새로운 커밋을 기록할 수 있다는 점에서 'git revert' 명령과 다릅니다.

'git Reset' 명령으로 'HEAD~1'을 설명할 수 있습니다. 왜냐하면 이 재설정 명령은 설명된 커밋을 퇴화하는 동안 새로운 HEAD 위치를 설정하기 때문입니다.

결과적으로 우리는 되돌리기 위해 일부 파일에 대한 수정 사항을 다시 커밋하고 수행되지 않는 것으로 커밋합니다. 우리는 Git 저장소에 대한 새 파일을 커밋했지만 이 커밋을 퇴보시키고 싶습니다.

 $ git log --oneline -graph *b734307 (HEAD -> master) Added a new file named 'file1' *90f8bb1 (Head -> master) Second commit *7083e29 Initial repository commit  

'git revert' 명령을 실행하면 Git은 텍스트 편집기를 열어 수정 사항을 자동으로 커밋합니다.

마지막 커밋을 git 실행 취소하는 방법

커밋 메시지 실행이 완료되면 새 메시지가 새 커밋 해시와 함께 표시됩니다.

 [master 2d40a2c] Revert 'Added a new file named as file1' 1 file changed, 1 deletion(-) delete mode 100644 file1  

Git 기록을 다시 확인해야 한다면 저장소를 통해 마지막 커밋을 실행 취소하기 위해 새로운 커밋이 추가된 것을 볼 수 있습니다.

 $ git log --oneline --graph *2d40a2c (HEAD -> master) Revert 'Added a new file named file1' *1fa26e9 Added a new file named as file1 *ee8b133 Second commit *a3bdedf Initial commit