로컬 git 커밋을 취소하는 방법
내 문제는 파일을 변경했습니다. 예 : README, 새 줄 ' this for my testing line '을 추가하고 파일을 저장 한 후 다음 명령을 실행했습니다.
git status
# On branch master
# Changed but not updated:
# (use "git add <file>..." to update what will be committed)
# (use "git checkout -- <file>..." to discard changes in working directory)
#
# modified: README
#
no changes added to commit (use "git add" and/or "git commit -a")
git add README
git commit -a -m 'To add new line to readme'
코드를 github에 푸시하지 않았습니다. 이제이 커밋을 취소하고 싶습니다.
이를 위해 나는
git reset --hard HEAD~1
그러나 README 파일에서 새로 추가 된 ' this for my testing line ' 줄을 잃어 버렸습니다 . 이것은 일어나지 않아야합니다. 거기에 콘텐츠가 필요합니다. 콘텐츠를 유지하고 내 로컬 커밋을 취소하는 방법이 있습니까?
플래그 git reset
없이 사용 하십시오 --hard
.
git reset HEAD~1
PS :에 유닉스 기반 시스템이 사용할 수있는 HEAD^
동일하다 HEAD~1
. Windows 에서는 라인 연속을 알리기 HEAD^
때문에 작동하지 않습니다 ^
. 따라서 명령 프롬프트에서 More?
.
플래그 --soft
대신 사용 --hard
:
git reset --soft HEAD^
커밋 중간에있는 경우 (즉, 이미 편집기에서) 첫 번째 .NET의 모든 줄을 삭제하여 취소 할 수 있습니다 #
. 그러면 커밋이 중단됩니다.
따라서 커밋 메시지가 비어 있도록 모든 줄을 삭제 한 다음 파일을 저장할 수 있습니다.
그러면라는 메시지가 표시 Aborting commit due to empty commit message.
됩니다.
수정 :
모든 줄을 삭제할 수도 있으며 결과는 정확히 동일합니다.
vim의 모든 행을 삭제하려면 (기본 편집기 인 경우) 편집기에있는 경우 입력 gg
하여 첫 번째 행으로 이동 한 다음 dG
모든 행을 삭제합니다. 마지막으로 파일을 쓰고 종료하면 wq
커밋이 중단됩니다.
The first thing you should do is to determine whether you want to keep the local changes before you delete the commit message.
Use git log
to show current commit messages, then find the commit_id
before the commit that you want to delete, not the commit you want to delete.
If you want to keep the locally changed files, and just delete commit message:
git reset --soft commit_id
If you want to delete all locally changed files and the commit message:
git reset --hard commit_id
That's the difference of soft and hard
You can tell Git what to do with your index (set of files that will become the next commit) and working directory when performing git reset by using one of the parameters:
--soft
: Only commits will be reseted, while Index and the working directory are not altered.
--mixed
: 이것은 HEAD와 일치하도록 인덱스를 재설정하고 작업 디렉토리는 건드리지 않습니다. 모든 변경 사항은 작업 디렉토리에 유지되며 수정 된 것으로 나타납니다.
--hard
: 모든 것 (커밋, 색인, 작업 디렉토리)을 HEAD와 일치하도록 재설정합니다.
귀하의 경우에는 git reset --soft
Index 및 작업 디렉토리에 수정 된 변경 사항을 유지 하는 데 사용 합니다. 더 자세한 설명 을 보려면 이것을 확인하십시오 .
아래 명령을 사용하십시오. $ git reset HEAD ~ 1이 후 아래 응답과 같이 되 돌리는 파일을 볼 수도 있습니다.
재설정 후 준비되지 않은 변경 : M application / config / config.php M application / config / database.php
참고 URL : https://stackoverflow.com/questions/4850717/how-to-cancel-a-local-git-commit
'Program Tip' 카테고리의 다른 글
JavaScript에서 스택과 큐를 어떻게 구현합니까? (0) | 2020.09.30 |
---|---|
Java 9에서 java.lang.NoClassDefFoundError : javax / xml / bind / JAXBException을 해결하는 방법 (0) | 2020.09.30 |
파일 및 관련 데이터를 가급적 JSON으로 RESTful 웹 서비스에 게시 (0) | 2020.09.30 |
기존 콜백 API를 프라 미스로 어떻게 변환합니까? (0) | 2020.09.30 |
직접 캐스팅 대 'as'연산자? (0) | 2020.09.30 |