"git commit" 대신 수행된 "git commit --amend"를 실행 취소하는 방법
제가 실수로 이전 약속을 수정했습니다.특정 파일에 대한 변경 내역을 보관하려면 커밋이 별도로 설정되어 있어야 합니다.
마지막 약속을 취소할 방법이 있습니까?만약에 제가 이런 걸 하면요.git reset --hard HEAD^첫 번째 커밋도 실행 취소됩니다.
(아직 원격 디렉터리로 푸시하지 않았습니다.)
할 의 재와동세정과 입니다.HEAD커밋, 이전 버전의 부모와 함께HEAD.git reset --soft다음 커밋이 현재 분기 헤드가 있는 위치와 다른 커밋 위에서 발생하도록 분기 포인터를 이동합니다.
# Move the current head so that it's pointing at the old commit
# Leave the index intact for redoing the commit.
# HEAD@{1} gives you "the commit that HEAD pointed at before
# it was moved to where it currently points at". Note that this is
# different from HEAD~1, which gives you "the commit that is the
# parent node of the commit that HEAD is currently pointing to."
git reset --soft HEAD@{1}
# commit the current tree using the commit details of the previous
# HEAD commit. (Note that HEAD@{1} is pointing somewhere different from the
# previous command. It's now pointing at the erroneously amended commit.)
# The -C option takes the given commit and reuses the log message and
# authorship information.
git commit -C HEAD@{1}
ref-log를 사용합니다.
git branch fixing-things HEAD@{1}
git reset fixing-things
그러면 이전에 수정된 모든 변경 사항을 작업 복사본에만 저장하고 다시 커밋할 수 있습니다.
다음과 같이 입력합니다.git reflog
다음을 사용하여 답변하지 않습니다.HEAD@{1}그래서 제 해결책은 다음과 같습니다.
git reflog
d0c9f22 HEAD@{0}: commit (amend): [Feature] - ABC Commit Description
c296452 HEAD@{1}: commit: [Feature] - ABC Commit Description
git reset --soft c296452
이제 준비 환경에 실수로 c296452 커밋과 병합한 모든 변경 사항이 포함됩니다.
수정된 커밋 찾기 방법:
git log --reflog
참고: 추가할 수 있습니다.--patch명확한 확인을 위해 커밋의 본문을 확인합니다.과 동일git reflog.
그런 다음 다음 문제가 발생한 시점에서 HEAD를 이전 커밋으로 재설정합니다.
git reset SHA1 --hard
참고: SHA1을 실제 커밋 해시로 대체합니다.또한 이 명령은 커밋되지 않은 변경사항을 손실하므로 이전에 저장할 수 있습니다.또는 최신 변경사항을 유지한 후 커밋하려면 를 대신 사용합니다.
그런 다음 필요한 다른 커밋을 선택합니다.
git cherry-pick SHA1
커밋을 원격으로 푸시한 다음 해당 커밋의 변경 내용을 잘못 수정한 경우 문제가 해결됩니다.를 발행합니다.git log(이것은 이름이 (원격 이름이 오리진이라고 가정함).이제 해당 SHA를 사용하여 이러한 명령을 실행합니다.
git reset --soft <SHA BEFORE THE AMMEND>
#you now see all the changes in the commit and the amend undone
#save ALL the changes to the stash
git stash
git pull origin <your-branch> --ff-only
#if you issue git log you can see that you have the commit you didn't want to amend
git stash pop
#git status reveals only the changes you incorrectly amended
#now you can create your new unamended commit
메시지가 할 수 . 커밋 메시지가 됩니다.git commit --amend지휘권
매뉴얼에서 커밋을 언제든지 분할할 수 있습니다.
- gitrebase -i commit^을 사용하여 대화형 기본 재배치를 시작합니다. 여기서 commit은 분할할 커밋입니다.실제로 커밋 범위가 포함되어 있는 한 모든 커밋 범위가 좋습니다.
- 분할할 커밋을 "편집" 작업으로 표시합니다.
- 해당 커밋을 편집할 때는 git reset HEAD^를 실행합니다.효과는 HEAD가 하나씩 되감겨지고 지수가 그 뒤를 따릅니다.그러나 작업 트리는 그대로 유지됩니다.
- 이제 첫 번째 커밋에서 적용할 인덱스에 변경 사항을 추가합니다.이를 위해 git add(대화형) 또는 git-gui(또는 둘 다)를 사용할 수 있습니다.
- 현재 인덱스를 지금 적합한 커밋 메시지로 커밋합니다.
- 작업 트리가 깨끗해질 때까지 마지막 두 단계를 반복합니다.
- gitrebase --continue를 사용하여 기본 재배치를 계속합니다.
사용할 수 있음git reflog수정 전과 수정 후 두 번의 커밋을 받는 것.
사용할 경우git diff before_commit_id after_commit_id > d.diff수정 전과 수정 후 사이에 차이가 나는 것.
다음 용도git checkout before_commit_id약속하기 전으로 되돌아가다
그리고 마지막 사용git apply d.diff당신이 한 진짜 변화를 적용하는 것.
그것으로 제 문제가 해결됩니다.
아래에서 실행 취소할 수 있습니다.git commit —amend
git reset --soft HEAD^git checkout files_from_old_commit_on_branchgit pull origin your_branch_name
====================================
이제 변경 내용은 이전과 같습니다.이제 실행 취소가 완료되었습니다.git commit —amend
이제 할 수 있습니다.git push origin <your_branch_name>지점으로 이동합니다.
거의 9년이나 늦었지만 이 변화가 동일한 작업을 수행하는 것으로 언급되지는 않았습니다. (이는 상위 답변(https://stackoverflow.com/a/1459264/4642530) 과 유사한 몇 가지 조합입니다.)
분기에서 분리된 모든 헤드 검색
git reflog show origin/BRANCH_NAME --date=relative
그런 다음 SHA1 해시를 찾습니다.
이전 SHA1로 재설정
git reset --hard SHA1
그리고 다시 밀어 올립니다.
git push origin BRANCH_NAME
다 했어요.
이렇게 하면 이전 커밋으로 완전히 돌아갑니다.
(이전에 덮어쓴 분리 커밋 헤드의 날짜 포함)
마지막 커밋을 사용하여 임시 분기에 체크아웃
git branch temp HEAD@{1}마지막 커밋 재설정
git reset temp이제 이전 커밋뿐만 아니라 모든 파일이 커밋됩니다.모든 파일의 상태를 확인합니다.
git statusgit 단계에서 커밋 파일을 재설정합니다.
git reset myfile1.js(곧)이 커밋 다시 연결
git commit -C HEAD@{1}새 커밋에 파일을 추가하고 커밋합니다.
간단한 솔루션 작동 가능: 헤드 커밋이 원격 커밋과 동기화된 경우.
- 로컬 작업 공간에 분기를 하나 더 만들고 원격 분기와 동기화 상태를 유지합니다.
- 새로 만든 분기에 대해 수행된 분기(git commit --amend)에서 HEAD 커밋을 선택합니다.
선택한 커밋에는 이전 변경사항이 아닌 최신 변경사항만 포함됩니다.이제 이 커밋의 이름을 변경할 수 있습니다.
언급URL : https://stackoverflow.com/questions/1459150/how-to-undo-git-commit-amend-done-instead-of-git-commit
'itsource' 카테고리의 다른 글
| Windows에서 디렉터리/폴더의 트리 보기? (0) | 2023.05.07 |
|---|---|
| 목록의 모든 요소가 동일한 유형인지 확인 (0) | 2023.05.07 |
| 기본 재배치에 관련 없는 기록 병합을 거부하는 Git (0) | 2023.05.02 |
| Git 하위 모듈 업데이트 (0) | 2023.05.02 |
| git를 사용하여 특정 파일의 변경 사항 보기 (0) | 2023.05.02 |