옵션 - git 되돌리기




어떻게하면 Git에서 가장 최근 커밋을 실행 취소 할 수 있습니까? (20)

실수로 잘못된 파일을 Git 에 위탁했지만 서버에 커밋을 아직 푸시하지 않았습니다.

로컬 저장소에서 커밋을 어떻게 취소 할 수 있습니까?


마지막 커밋 실행 취소 :

git reset --soft HEAD^ 또는 git reset --soft HEAD~

마지막 커밋을 취소합니다.

여기에서 --soft 는 준비로 재설정하는 것을 의미합니다.

HEAD~ 또는 HEAD^HEAD^ 이전에 커밋으로 이동하는 것을 의미합니다.

마지막 커밋을 새 커밋으로 바꾸기 :

git commit --amend -m "message"

마지막 커밋을 새로운 커밋으로 바꿉니다.


마지막 커밋을 변경하려면

색인에있는 파일을 대체하십시오.

git rm --cached *.class
git add *.java

그런 다음 사설 브랜치 인 경우 커밋을 수정 하십시오.

git commit --amend

또는 공유 지점 인 경우 새 커밋을 만듭니다.

git commit -m 'Replace .class files with .java files'


( 이전 커밋을 변경 하려면 멋진 대화 형 rebase 사용 )

ProTip ™ : *.classgitignore 에 추가하여이 문제를 다시 방지하십시오.

커밋을 되돌리려면

최종 커밋을 변경해야하지만보다 일반적인 솔루션이 reset 되는 경우 커밋을 수정하는 것이 이상적인 솔루션입니다.

다음을 사용하여 git를 커밋으로 재설정 할 수 있습니다.

git reset @~N

여기서 NHEAD 이전 커밋 수이고 @~ 는 이전 커밋으로 재설정됩니다.

따라서 커밋을 수정하는 대신 다음을 사용할 수 있습니다.

git reset @~
git add *.java
git commit -m "Add .java files"

git help reset , 특히 --soft --mixed--hard 섹션을 확인하십시오.

Reflog

엉망이라면 항상 reflog를 사용하여 삭제 된 커밋을 찾을 수 있습니다.

$ git reset @~
$ git reflog
c4f708b [email protected]{0}: reset: moving to @~
2c52489 [email protected]{1}: commit: added some .class files
$ git reset 2c52489
... and you're back where you started



커밋 및 다시 실행 취소

$ git commit -m "Something terribly misguided"             # (1)
$ git reset HEAD~                                          # (2)
<< edit files as necessary >>                              # (3)
$ git add ...                                              # (4)
$ git commit -c ORIG_HEAD                                  # (5)
  1. 이 작업을 실행 취소하려고합니다.
  2. 이렇게하면 작업 트리 (디스크에있는 파일의 상태)는 변경되지 않지만 커밋을 취소하고 커밋하지 않은 커밋 변경 사항을 남겨 둡니다 ( git status 에서 "커밋을 위해 변경되지 않은 변경 사항"으로 표시됨). 커밋하기 전에 다시 추가하십시오). 이전 커밋 더 많은 변경 사항을 추가 하거나 커밋 메시지 1을 변경하려면 git reset --soft HEAD~git reset HEAD~ 와 같이 사용할 수 있습니다 (여기서 HEAD~HEAD~1 과 동일합니다). )하지만 기존 변경 사항을 그대로 둡니다.
  3. 작업 트리 파일을 수정하십시오.
  4. git add 은 새로운 커밋에 포함시키고 자하는 것을 git add .
  5. 이전 커밋 메시지를 다시 사용하여 변경 내용을 커밋합니다. 이전 헤드를 .git/ORIG_HEAD 복사했습니다. -c ORIG_HEAD 를 사용하여 commit 하면 처음에는 이전 커밋의 로그 메시지가 포함 된 편집기가 열리고이를 편집 할 수 있습니다. 메시지를 편집 할 필요가 없으면 -C 옵션을 사용할 수 있습니다.

그러나 인덱스에 새로운 변경 사항을 추가 한 경우 commit --amend 를 사용하면 이전 커밋에 추가됩니다.

코드가 이미 서버에 푸시되었고 기록 (덮어 씀)을 덮어 쓸 수있는 권한이있는 경우 :

git push origin master --force

이 대답을 볼 수도 있습니다.

HEAD를 이전 위치로 다시 이동시키는 방법? (분리 헤드)

위의 대답은 당신이 되돌리려 고 할 SHA-1이 무엇인지 알아 내는데 사용되는 git reflog 를 보여줄 것입니다. 위에서 설명한대로 일련의 명령을 사용하기 위해 실행 취소하려는 지점을 찾았 으면

그러나 커밋 메시지 에서 실수를 한 경우 이전 커밋으로 다시 설정할 필요가 없습니다. 더 쉬운 옵션은 git reset (이전에 변경 한 내용을 업 스테이지 한 다음) git commit --amend , 마지막 커밋 메시지로 미리 채워진 기본 커밋 메시지 편집기를 엽니 다.


"작업 트리를 마지막 커밋으로 재설정"

git reset --hard HEAD^ 

"작업 트리에서 알 수없는 파일 정리"

git clean    

참조 - Git 빠른 참조

참고 : 이 명령은 이전 커밋을 삭제하므로주의해서 사용해야합니다! git reset --hard - 더 안전하다 -


간단하게 명령 행에서 다음을 실행하십시오.

git reset --soft HEAD~ 

공유 저장소에서 가장 최근에 수행 된 5 개의 커밋을 실행 취소하고 싶었습니다. 나는 롤백을 원했던 개정 ID를 찾았다. 그런 다음 다음을 입력했습니다.

prompt> git reset --hard 5a7404742c85
HEAD is now at 5a74047 Added one more page to catalogue
prompt> git push origin master --force
Total 0 (delta 0), reused 0 (delta 0)
remote: bb/acl: neoneye is allowed. accepted payload.
To [email protected]:thecompany/prometheus.git
 + 09a6480...5a74047 master -> master (forced update)
prompt>

당신이 쓰레기를 저지르고 밀었다면,

git reset --soft HEAD~1

HEAD ~ 1 은 머리가되기 전 커밋의 속기입니다. 또는 재설정하려는 경우 해시의 SHA-1 을 참조 할 수 있습니다. --soft 옵션은 커밋을 삭제하지만 변경된 모든 파일을 "커밋 할 변경 사항"으로 남겨 둡니다.

작업 트리에서 추적 된 파일의 변경 사항을 없애기 위해서는 헤드가 커밋되기 전에 " --hard "를 사용하십시오.

또는

만약 당신이 이미 밀고 누군가가 보통 내 사건이다, 당신은 힘내 재설정을 사용할 수 없습니다. 당신은 자식 되돌릴 수 있지만,

git revert HEAD

이것은 우연한 커밋에 의해 도입 된 모든 것을 뒤집는 새로운 커밋을 생성합니다.


두 가지 주요 시나리오가 있습니다.

아직 커밋을 푸시하지 않았습니다.

문제가 커밋 된 추가 파일 (그리고 저장소에있는 파일을 원하지 않는 경우) 인 경우 git rm 사용하여 제거한 다음 --amend 를 사용하여 커밋 할 수 있습니다

git rm <pathToFile>

-r 하여 전체 디렉토리를 제거하거나 다른 Bash 명령과 결합 할 수도 있습니다

git rm -r <pathToDirectory>
git rm $(find -name '*.class')

파일을 제거한 후 --amend 옵션을 사용하여 커밋 할 수 있습니다.

git commit --amend -C HEAD # the -C option is to use the same commit message

이것은 최근의 로컬 커밋을 재 작성하여 여분의 파일을 제거하므로,이 파일은 푸시하지 않고 GC에 의해 로컬 .git 저장소에서 제거됩니다.

이미 커밋을 푸시했습니다.

다른 시나리오의 동일한 솔루션을 적용한 다음 -f 옵션을 사용하여 git push 를 수행 할 수 있지만 원격 기록을 다른 변경 사항으로 덮어 쓰므로 (저장소가 엉망이 될 수 있으므로) 권장되지 않습니다 .

대신에, --amend 없이 커밋을해야한다. (이것에 관해서는 -amend`를 기억하라 : 그 옵션은 마지막 커밋에서 히스토리를 재 작성한다).


로컬 커밋을 완전히 취소 할 계획이라면 커밋에서 변경 한 내용이 무엇이든간에 걱정하지 않으시면 다음 명령을 수행하십시오.

git reset --hard HEAD^1

(이 명령은 전체 커밋을 무시하고 변경 사항은 로컬 작업 트리에서 완전히 손실됩니다). 커밋을 취소하고 싶지만 staged 영역에서 변경을 원할 경우 ( git add 후에 커밋하기 전에) 다음 명령을 수행하십시오.

git reset --soft HEAD^1

이제 커밋 된 파일이 준비 영역으로 들어갑니다. 잘못된 콘텐츠를 편집해야하기 때문에 파일을 업 스테이지하려는 경우 다음 명령을 실행하십시오

git reset HEAD

이제 커미트 된 파일을 무단 영역으로 가져 왔습니다. 이제 파일을 편집 할 준비가되었습니다. 따라서 변경 한 내용을 편집하고 추가하고 새롭고 새로운 커밋을하고 싶습니다.

More


마지막 커밋에서 파일을 제거하려면 다음을 사용할 수 있습니다.

git reset --hard HEAD~1

마지막 커밋에서 필요한 파일이 있으면 다음과 같이 사용할 수 있습니다.

git reset --soft HEAD~1

어떻게 작동하는지 모르는 경우 커밋을 취소하는 것은 약간 무서운 일입니다. 그러나 이해한다면 실제로 놀랍도록 쉽게 할 수 있습니다.

C가 HEAD이고 F가 파일 상태입니다.

   (F)
A-B-C
    ↑
  master

당신은 C핵으로 만들고 다시는 그것을 보지 않으려 합니다 . 너는 이렇게한다 :

git reset --hard HEAD~1

결과는 다음과 같습니다.

 (F)
A-B
  ↑
master

이제 B는 HEAD입니다. --hard 를 사용 했으므로 파일은 커밋 B에서 상태로 재설정됩니다.

아,하지만 커밋 C는 재앙이 아니었지만, 조금은 벗어났습니다. 커밋취소하지만 더 나은 커밋을하기 전에 약간의 편집을 위해 변경 사항유지 하고자합니다. 머리부터 C로 여기에서 다시 시작하십시오.

   (F)
A-B-C
    ↑
  master

당신은 이것을 할 수 있습니다.

git reset HEAD~1

이 경우 결과는 다음과 같습니다.

   (F)
A-B-C
  ↑
master

두 경우 모두 HEAD는 최신 커밋을 가리키는 포인터 일뿐입니다. git reset HEAD~1 을 수행 할 때, Git에게 HEAD 포인터를 한 커밋 뒤로 이동 시키라고 명령합니다. 그러나 ( --hard 를 사용하지 않는 한) 파일을 그대로 두십시오. 이제 git status 는 C에 체크인 한 변경 사항을 보여줍니다.

가장 가벼운 터치의 경우 커밋을 취소 할 수도 있지만 파일과 index 남겨 둘 수 있습니다 .

git reset --soft HEAD~1

이것은 파일을 혼자 남겨 둘뿐만 아니라 색인을 혼자 남겨 둡니다. git status 을 사용하면 이전과 같은 색인이 색인에 있음을 알 수 있습니다. 사실,이 명령 바로 다음에 git commit 을 할 수 있고 방금 전에했던 것과 동일한 커밋을 다시 할 수 있습니다.

한 가지 더 : 첫 번째 예제에서와 같이 커밋을 삭제한다고 가정 해 보겠습니다 . 힘든 행운, 맞지?

아니, 아직 그것을 되 찾을 수있는 방법이 있습니다. git reflog 입력하면 이동 한 (부분적인) 커밋 shas 목록이 표시됩니다. 커밋 된 커밋을 찾아서 다음과 같이하십시오.

git checkout -b someNewBranchName shaYouDestroyed

이제 저 커밋을 부활 시켰습니다. 커밋은 실제로 Git에서 약 90 일 동안 파괴되지 않으므로, 보통 돌아가서 제거하지 않을 것을 구할 수 있습니다.


여러 가지 방법이 있습니다.

Git 명령을 사용하여 마지막 커밋 / 이전 커밋을 실행 취소합니다.

경고 : 자신이하는 일을 모르는 경우 --hard를 사용하지 마십시오. - 하드가 너무 위험 하고 파일을 삭제할 수 있습니다.

힘내에서 커밋을 되돌리려는 기본 명령은 다음과 같습니다.

$ git reset --hard <COMMIT -ID>

또는

$ git reset --hard HEAD~<n>

COMMIT-ID : 커밋 ID

n : 되돌릴 마지막 커밋 수입니다.

아래와 같이 커밋 ID를 얻을 수 있습니다.

$ **git log --oneline**

d81d3f1 function to subtract two numbers

be20eb8 function to add two numbers

bedgfgg function to mulitply two numbers

여기서 d81d3f1be20eb8 은 커밋 ID입니다.

이제 몇 가지 사례를 살펴 보겠습니다.

마지막 커밋 'd81d3f1'을 되돌리려한다고 가정하십시오. 다음 두 가지 옵션이 있습니다.

$ git reset --hard d81d3f1

또는

$ git reset --hard HEAD~1

커밋 'be20eb8'을 되돌리려한다고 가정 해보십시오.

$ git reset --hard be20eb8

더 자세한 정보를 얻으려면 헤드를 지정된 상태로 재설정하기 위해 몇 가지 다른 명령을 참조하고 사용해보십시오.

$ git reset --help

원하는 방식대로 파일을 추가 / 제거하십시오.

git rm classdir
git add sourcedir

그런 다음 커밋을 수정하십시오.

git commit --amend

이전의 잘못된 커밋은 새 인덱스 상태를 반영하도록 편집됩니다. 즉, 처음에는 실수하지 않았을 것입니다.

아직 푸시하지 않은 경우에만이 작업을 수행해야합니다. 푸시했다면 정상적으로 수정해야합니다.


좋은 목록이 나올 커밋을 선택할 수있는 곳에서 팝업을하기 때문에이 작업에 git rebase -i 를 사용하는 것을 선호합니다. 여기에 다른 답변만큼 직접적이지는 않겠지 만, 딱 맞는 느낌 입니다.

목록에 넣을 커밋 수를 선택하고 다음과 같이 호출하십시오 (지난 3 일에 등록).

git rebase -i HEAD~3

샘플 목록

pick aa28ba7 Sanity check for RtmpSrv port
pick c26c541 RtmpSrv version option
pick 58d6909 Better URL decoding support

그러면 git은 제거한 모든 행에 대한 커밋을 제거합니다.


필자의 경우 필자는 원하지 않는 일부 파일을 실수로 저질렀습니다. 그래서 저는 다음과 같이했습니다.

git reset --soft HEAD^
git rm --cached [files you do not need]
git add [files you need]
git commit -c ORIG_HEAD

gitk 또는 git log를 사용하여 결과 확인 --stat


Git Extras가 설치되어 있다면 git undo 를 실행하여 최신 커밋을 실행 git undo 할 수 있습니다. git undo 3 는 마지막 3 개의 커밋을 실행 취소합니다.


SourceTree (GitHub 용 GUI)에서 커밋을 마우스 오른쪽 버튼으로 클릭하고 '커밋을 취소'할 수 있습니다. 변경 사항을 취소해야합니다.

터미널에서 :

또는 다음을 사용할 수 있습니다 :

git revert

또는:

git reset --soft HEAD^ # Use --soft if you want to keep your changes.
git reset --hard HEAD^ # Use --hard if you don't care about keeping your changes.

git log 를 입력하고 마지막 커밋 해시 코드를 찾은 후 다음을 입력하십시오.

git reset <the previous co>

git 명령을 사용하여 아래 명령을 재설정하십시오.

git reset --soft HEAD~1

설명 : git reset 은 기본적으로 돌아가고 자하는 커밋으로 reset 되며, --soft 키와 결합하면 되돌아갑니다.하지만 파일에 변경 사항을 유지합니다. 당신은 파일이 방금 추가 된 단계로 돌아갑니다. HEAD 는 브랜치의 머리입니다. ~1 (이 경우에는 HEAD^ 사용)과 결합하면 원하는대로 하나의 커밋으로 되돌아갑니다. ..

실제 상황에서 발생하고 코드를 커밋 할 수있는 모든 단계를 포함하여 아래 이미지의 단계를 자세히 설명합니다.


마지막 힘내 커밋을 취소하는 방법?

모든 커밋을 마지막 커밋 이전의 상태로 되돌리려면 HEAD 이전 커밋으로 다시 설정해야합니다.

  1. 변경 사항을 유지하지 않으려면 다음을 수행하십시오.

    git reset --hard HEAD^
    
  2. 변경 사항을 유지하려면 다음을 수행하십시오.

    git reset --soft HEAD^
    

이제 git log를 확인하십시오. 마지막 커밋이 제거되었음을 알 수 있습니다.







git-revert