소프트웨어 엔지니어 또는 웹 개발자로서 우리는 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은 텍스트 편집기를 열어 수정 사항을 자동으로 커밋합니다.
커밋 메시지 실행이 완료되면 새 메시지가 새 커밋 해시와 함께 표시됩니다.
[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