programing

변경을 잃지 않고 마지막으로 푸시되지 않은 git 커밋을 언커밋하는 방법

sourcejob 2023. 4. 19. 22:56
반응형

변경을 잃지 않고 마지막으로 푸시되지 않은 git 커밋을 언커밋하는 방법

커밋을 되돌려서 로컬 복사본이 해당 커밋의 변경 내용을 유지하지만 작업 복사본에서 커밋되지 않은 변경 내용이 되도록 하는 방법이 있습니까?커밋을 롤백하면 이전 커밋으로 이동합니다.변경 내용을 유지하려고 하는데 잘못된 브랜치에 커밋했습니다.

푸시된 것이 아니라 커밋된 것입니다.

여기에는 다음과 같은 많은 방법이 있습니다.

커밋을 아직 공개하지 않은 경우:

git reset HEAD~1 --soft   

즉, 커밋 변경은 작업 디렉토리에 있는 반면 LAST 커밋은 현재 브랜치에서 삭제됩니다.git reset man 참조


공개적으로 푸시한 경우('master'라는 브랜치에서):

git checkout -b MyCommit //save your commit in a separate branch just in case (so you don't have to dig it from reflog in case you screw up :) )

정상적으로 커밋을 되돌리고 밀어넣기

git checkout master
git revert a8172f36 #hash of the commit you want to destroy
# this introduces a new commit (say, it's hash is 86b48ba) which removes changes, introduced in the commit in question (but those changes are still visible in the history)
git push origin master

커밋으로 는, 「만 하면 됩니다.--no-commit★★★★

git revert --no-commit 86b48ba (hash of the revert commit).

https://github.com/Isantipov/git-revert/commits/master 의 작은 예를 작성했습니다.

은 Git을 입니다.git reset

  • 부드러운
  • 어려운
  • 혼재된

두 개의 커밋을 추가하고 마지막 커밋을 실행 취소한다고 가정합니다.

$ git log --oneline

45e6e13 (HEAD -> master) Second commit
eb14168 Initial commit

–soft your 。

$ git reset --soft HEAD~1


$ git status

On branch master
Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
    modified:   file.html


$ git log --oneline

eb14168 (HEAD -> master) Initial commit

–hard working and 변경을 합니다.

$ git reset --hard HEAD~1


$ git status

nothing to commit, working tree clean


$ git log --oneline

eb14168 (HEAD -> master) Initial commit

--mixed, 는 그렇지 .

$ git reset --mixed HEAD~1


$ git status

On branch master
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
    modified:   file.html

no changes added to commit (use "git add" and/or "git commit -a")


$ git log --oneline

eb14168 (HEAD -> master) Initial commit

는, 「」를 할 수 .undo다른 브랜치를 사용하지 않고 파일을 다시 스테이지로 이동합니다.

git show HEAD > patch
git revert HEAD
git apply patch

마지막 분기 변경을 포함하는 패치파일이 생성됩니다.그런 다음 변경을 되돌립니다.마지막으로 패치 파일을 작업 트리에 적용합니다.

이 경우: "이것은 푸시되지 않고 커밋되었습니다." - IntelliJ(또는 다른 JetBrains IDE)를 사용하고 있으며 아직 변경을 푸시하지 않은 경우 다음 작업을 수행할 수 있습니다.

  1. 버전 제어 창(Alt + 9/Command + 9) - "로그" 탭으로 이동합니다.
  2. 마지막 커밋보다 먼저 커밋을 오른쪽 클릭합니다.
  3. 현재 분기를 여기로 재설정
  4. 소프트(!!)를 선택합니다.
  5. 대화창 하단에 있는 Reset(리셋) 버튼을 누릅니다.

다 했어요.

그러면 변경 내용이 "커밋 해제"되고 git 상태가 마지막 로컬 커밋 이전 지점으로 돌아갑니다.변경한 내용이 손실되지 않습니다.

2021년 이후 구글 동료들을 위한 새로운 업데이트.

다음은 VSCode 사용자인 경우 마지막 약속을 취소할 수 있는 최신 방법입니다.

  1. [Source Control]탭).Ctrl + Shift + G G를 참조해 주세요.
  2. ...를 클릭합니다.다음의 스크린샷을 참조해 주세요.
  3. Commit(커밋)으로 이동하고 Undo Last Commit(마지막 커밋 취소)로 이동합니다.다음은 스크린샷입니다.

이 기능은 변경 사항을 변경하지 않고 커밋하기 전과 동일하게 저장소를 복원하는 것입니다.

2020 심플한 방법:

git reset <commit_hash>

유지할 마지막 커밋의 해시를 커밋합니다.

대부분의 경우 잘못된 지점에 변경을 가하고 나중에 깨달았을 때 발생합니다.그리고 대부분의 경우 팔로잉은 효과가 있습니다.

git revert commit-hash
git push

git checkout my-other-branch
git revert revert-commit-hash
git push
  1. 커밋을 되돌리다
  2. (작성 및 체크아웃) 다른 지점
  3. 되돌아가다

이러한 명령어를 다른 폴더에서 실행하기 전에 반드시 변경 내용을 백업하십시오.

git 체크아웃 branch_name

지점 체크아웃

git merge --개요

병합을 중지합니다.

git 상태

병합 중단 후 코드 상태 확인

git reset --hard origin/hard_name

이 명령어는 변경을 리셋하고 코드를 branch_name(branch_name) 코드에 맞춥니다.

스텝을 추가하면서 저 같은 초보자에게 도움이 되길 바라며 따라했습니다.

아래 그림은 비트버킷의 리모트 브랜치 'A'에 이미 푸시한 커밋을 보여줍니다.여기에 이미지 설명 입력

이 5개의 커밋 중 마지막 2개는 그대로 유지하고 싶지만, 처음 3개의 커밋은 다른 브랜치 'B'로 푸시하고 싶습니다.

다음은 제가 수행한 단계입니다.

지점 'A' 내부:

  1. git revert <commit-hash>3개의 커밋 각각에 대해서.예를 들어 d4a3734는 그림에서 마지막 커밋의 커밋 해시입니다.(여러 커밋을 한 번에 되돌릴 수 있는 경우 - 여러 git 커밋을 되돌리는 방법 참조)
  2. git push

밀어넣은 후, 다음과 같이 됩니다.

여기에 이미지 설명 입력

제 지점 'A'에는 처음 두 개의 커밋만 있습니다.그게 제가 원하던 거예요.다음으로 지점 체크아웃을 원했습니다.새로운 브런치일 경우git checkout -b <branchname>git checkout B.

지점 'B' 내부:

나는 단순히 B로 분류하고 싶은 커밋을 골랐다.제 경우, 저는 다음과 같이 했습니다.

git cherry-pick <commit-hash> 

내가 되돌린 세 가지 커밋에 대해

(다시 한 번 예를 들어,git cherry-pick d4a3734여기서 d4a3734는 그림에서 마지막 커밋의 커밋 해시입니다.)

언급URL : https://stackoverflow.com/questions/19859486/how-to-un-commit-last-un-pushed-git-commit-without-losing-the-changes

반응형