이것을 처리하는 두 가지 방법이 있습니다. 상황에 따라 더 쉬운 방법
초기화
제거하려는 커밋이 마지막 커밋이고 추가 작업을 수행하지 않은 경우 간단히 사용할 수 있습니다. git-reset
git reset HEAD^
현재 HEAD 직전에 지점을 커밋으로 되돌립니다. 그러나 실제로 작업 트리의 파일은 변경되지 않습니다. 결과적으로 해당 커밋에 있었던 변경 사항은 수정 된 것으로 표시됩니다 ( '커밋 해제'명령처럼). 사실, 나는 그것을 할 별칭이 있습니다.
git config --global alias.uncommit 'reset HEAD^'
그런 다음 git uncommit
나중에 하나의 커밋을 백업하는 데 사용할 수 있습니다 .
스 쿼싱
커밋 스 쿼싱은 둘 이상의 커밋을 하나로 결합하는 것을 의미합니다. 나는 이것을 아주 자주한다. 귀하의 경우 절반 완료 기능이 커밋 된 다음 해당 기능을 끝내고 적절한 영구 커밋 메시지로 다시 커밋합니다.
git rebase -i <ref>
나는 이것이 많은 커밋이 될 수 있음을 분명히하기 위해 위와 같이 말합니다. git log
제거하려는 커밋을 실행 하고 찾아 SHA1을 복사하여 대신 사용하십시오 <ref>
. 힘내 당신을 대화 형 rebase 모드로 이동합니다. 현재 상태와에 넣은 것 사이의 모든 커밋이 표시됩니다 <ref>
. 따라서 <ref>
10 커밋 전에는 10 개의 커밋을 모두 표시합니다.
각 커밋 앞에 단어가 pick
있습니다. 를 사용해서 없애과에서 변경하려는 커밋 찾기 pick
에 fixup
나 squash
. 사용 fixup
단순히 폐기하는 커밋 메시지 및 목록에서 즉각적인 이전에 변경 사항을 병합합니다. squash
키워드는 같은 일을하지만, 당신이 새롭게 결합 된 커밋의 커밋 메시지를 편집 할 수 있습니다.
커밋은 편집기를 종료 할 때 목록에 표시되는 순서대로 다시 커밋됩니다. 따라서 임시 커밋을 한 다음 동일한 분기에서 다른 작업을 수행하고 나중에 커밋에서 기능을 완료 한 경우 rebase를 사용하면 커밋을 다시 정렬하고 스쿼시 할 수 있습니다.
경고:
리베이스는 히스토리 수정-DONT는 이미 다른 개발자와 공유 한 커밋에 대해이를 수행합니다.
스 태싱
git stash
나중에이 문제를 피하려면 커밋되지 않은 작업을 임시로 저장 하는 데 사용 하는 것이 좋습니다.
git stash save 'some message'
이렇게하면 현재 변경 사항이 숨김 목록의 옆에 저장됩니다. 위는 stash 명령의 가장 명확한 버전으로, 주석 처리중인 내용을 설명 할 수 있습니다. 간단하게 실행할 수 git stash
있지만 다른 메시지는 저장되지 않습니다.
당신은 숨김 목록을 찾아 볼 수 있습니다 ...
git stash list
이것은 당신의 모든 스 태쉬, 그들이 수행 한 브랜치, 메시지와 각 줄의 시작 부분, 그리고이 스 태쉬의 식별자를 보여줍니다. stash@{#}
여기서 #은 스 태쉬 배열에서의 위치입니다.
스 태시를 복원하려면 (스 태쉬가 원래 작성된 위치에 관계없이 모든 브랜치에서 수행 할 수 있음) 간단히 실행하면됩니다.
git stash apply stash@{#}
다시, 스 태쉬 배열의 위치는 #입니다. 복원하려는 숨김이 0
위치 에있는 경우, 즉 가장 최근 숨김 인 경우입니다. 그런 다음 숨김 위치를 지정하지 않고 명령을 실행할 수 있습니다 .git은 마지막 위치를 의미한다고 가정합니다 git stash apply
.
예를 들어, 내가 잘못된 브랜치에서 작업하는 것을 발견하면 다음과 같은 명령을 실행할 수 있습니다.
git stash
git checkout <correct_branch>
git stash apply
귀하의 경우 지점을 조금 더 이동했지만 동일한 아이디어가 여전히 적용됩니다.
도움이 되었기를 바랍니다.
git stash