logo

마지막 커밋을 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'를 적용하세요).

java 문자열을 구분 기호로 분할

커밋할 수정 사항:

 (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 

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

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