etc./StackOverFlow

Git 리포지토리를 이전 커밋으로 되돌리려면 어떻게 해야 합니까?

청렴결백한 만능 재주꾼 2021. 9. 25. 02:02
반응형

질문자 :Crazy Serb


현재 상태에서 특정 커밋에 대한 스냅샷으로 되돌리려면 어떻게 해야 합니까?

git log 하면 다음과 같은 결과가 나타납니다.

 $ git log commit a867b4af366350be2e7c21b8de9cc6504678a61b` Author: Me <me@me.com> Date: Thu Nov 4 18:59:41 2010 -0400 blah blah blah... commit 25eee4caef46ae64aa08e8ab3f988bc917ee1ce4 Author: Me <me@me.com> Date: Thu Nov 4 05:13:39 2010 -0400 more blah blah blah... commit 0766c053c0ea2035e90f504928f8df3c9363b8bd Author: Me <me@me.com> Date: Thu Nov 4 00:55:06 2010 -0400 And yet more blah blah... commit 0d1d7fc32e5a947fbd92ee598033d85bfc445a50 Author: Me <me@me.com> Date: Wed Nov 3 23:56:08 2010 -0400 Yep, more blah blah.

어떻게 11월 3일의 커밋으로 0d1d7fc 있습니까, 즉 commit 0d1d7fc ?



답변자 : Cascabel


이것은 "되돌리기"가 의미하는 바에 따라 크게 달라집니다.

일시적으로 다른 커밋으로 전환

일시적으로 그 상태로 돌아가고 싶다면, 바보짓을 한 다음 현재 위치로 돌아가서 원하는 커밋을 확인하기만 하면 됩니다.

 # This will detach your HEAD, that is, leave you with no branch checked out: git checkout 0d1d7fc32

또는 거기에 있는 동안 커밋을 하고 싶다면 거기에 있는 동안 새 분기를 만드세요.

 git checkout -b old-state 0d1d7fc32

당신이 있던 곳으로 돌아가려면, 당신이 있던 지점을 다시 확인하십시오. (분기를 변경할 때 항상 그렇듯이 변경을 수행한 경우 적절하게 처리해야 합니다. 재설정하여 버릴 수 있습니다. stash, checkout, stash pop을 사용하여 가져갈 수 있습니다. 커밋할 수 있습니다. 거기에 지점을 원하면 거기에 지점으로 보내십시오.)

게시되지 않은 커밋 영구 삭제

반면에 그 이후로 한 모든 것을 정말로 없애고 싶다면 두 가지 가능성이 있습니다. 하나, 이러한 커밋을 게시하지 않은 경우 간단히 재설정하십시오.

 # This will destroy any local modifications. # Don't do it if you have uncommitted work you want to keep. git reset --hard 0d1d7fc32 # Alternatively, if there's work to keep: git stash git reset --hard 0d1d7fc32 git stash pop # This saves the modifications, then reapplies that patch after resetting. # You could get merge conflicts, if you've modified things which were # changed since the commit you reset to.

엉망이라면 이미 로컬 변경 사항을 버린 것입니다. 그러나 다시 재설정하면 최소한 이전 위치로 돌아갈 수 있습니다.

새 커밋으로 게시된 커밋 실행 취소

반면에 저작물을 출판했다면 분기를 재설정하고 싶지 않을 것입니다. 분기가 효과적으로 기록을 다시 쓰는 것이기 때문입니다. 이 경우 실제로 커밋을 되돌릴 수 있습니다. Git에서 revert는 매우 구체적인 의미를 갖습니다. 즉, 취소하기 위해 리버스 패치로 커밋을 생성합니다. 이렇게 하면 기록을 다시 쓰지 않습니다.

 # This will create three separate revert commits: git revert a867b4af 25eee4ca 0766c053 # It also takes ranges. This will revert the last two commits: git revert HEAD~2..HEAD #Similarly, you can revert a range of commits using commit hashes (non inclusive of first hash): git revert 0d1d7fc..a867b4a # Reverting a merge commit git revert -m 1 <merge_commit_sha> # To get just one, you could use `rebase -i` to squash them afterwards # Or, you could do it manually (be sure to do this at top level of the repo) # get your index and work tree into the desired state, without changing HEAD: git checkout 0d1d7fc32 . # Then commit. Be sure and write a good message describing what you just did git commit

git-revert 맨페이지는 실제로 설명에서 이에 대한 많은 내용을 다룹니다. 또 다른 유용한 링크는 git-revert 에 대해 논의하는 이 git-scm.com 섹션 입니다.

결국 되돌리기를 원하지 않으면 되돌리거나(여기에 설명된 대로) 되돌리기 전으로 다시 재설정할 수 있습니다(이전 섹션 참조).

다음과 같은 경우에도 이 답변이 도움이 될 수 있습니다.
HEAD를 이전 위치로 다시 이동하려면 어떻게 해야 합니까? (분리된 헤드) & Undo 커밋



답변자 : Yarin


여기에는 복잡하고 위험한 답변이 많이 있지만 실제로는 쉽습니다.

 git revert --no-commit 0766c053..HEAD git commit

이것은 HEAD에서 커밋 해시로 모든 것을 되돌릴 것입니다. 즉, 0766c053 이후의 모든 커밋이 되돌아 간 것처럼 작업 트리에서 해당 커밋 상태를 다시 생성합니다. 그런 다음 현재 트리를 커밋하면 "되돌린" 커밋과 본질적으로 동일한 새로운 커밋이 생성됩니다.

( --no-commit 플래그를 사용하면 git이 모든 커밋을 한 번에 되돌릴 수 있습니다. 그렇지 않으면 범위의 각 커밋에 대한 메시지를 입력하라는 메시지가 표시되어 불필요한 새 커밋으로 기록을 흩뜨리게 됩니다.)

이것은 이전 상태로 롤백 하는 안전하고 쉬운 방법입니다. 히스토리는 삭제되지 않으므로 이미 공개된 커밋에 사용할 수 있습니다.



답변자 : boulder_ruby


로그 코더?

혼자서 작업하고 작동하기를 원하십니까? 아래 지침을 따르십시오. 저와 다른 많은 사람들에게 수년 동안 안정적으로 작동했습니다.

다른 사람들과 함께 일하고 계십니까? Git은 복잡합니다. 성급한 일을 하기 전에 이 답변 아래의 설명을 읽으십시오.

작업 복사본을 가장 최근 커밋으로 되돌리기

변경 사항을 무시하고 이전 커밋으로 되돌리려면:

 git reset --hard HEAD

여기서 HEAD는 현재 분기의 마지막 커밋입니다.

작업 복사본을 이전 커밋으로 되돌리기

가장 최근 커밋보다 오래된 커밋으로 되돌리려면:

 # Resets index to former commit; replace '56e05fced' with your commit code git reset 56e05fced # Moves pointer back to previous HEAD git reset --soft HEAD@{1} git commit -m "Revert to 56e05fced" # Updates working copy to reflect the new commit git reset --hard

크레딧은 유사한 스택 오버플로 질문으로 이동합니다. Git에서 SHA 해시로 커밋으로 되돌리겠습니까? .



답변자 : Pogrindis


나와 다른 사람들에게 가장 좋은 옵션은 Git 재설정 옵션입니다.

 git reset --hard <commidId> && git clean -f

이것은 나를 위한 최선의 선택이었습니다! 간단하고 빠르고 효과적입니다!


** 참고:** 주석에서 언급했듯이 이전 커밋의 복사본이 있는 다른 사람들과 브랜치를 공유하는 경우에는 이 작업을 수행하지 마십시오.

또한 의견에서 덜 '발랄한'방법을 원한다면 사용할 수 있습니다.

 git clean -i


답변자 : CodeWizard


HEAD 가 무엇인지 설명하면서 배경을 추가하겠습니다.

First of all what is HEAD?

HEAD 는 단순히 현재 분기의 현재 커밋(최신)에 대한 참조입니다. 주어진 시간에 HEAD 만 있을 수 있습니다 git worktree 제외).

HEAD 의 내용은 .git/HEAD 내부에 저장되며 현재 커밋의 40바이트 SHA-1을 포함합니다.


detached HEAD

최신 커밋에 있지 않으면 HEAD 가 기록의 이전 커밋을 가리키고 detached HEAD 라고 합니다.

여기에 이미지 설명 입력

HEAD 가 현재 분기의 끝을 가리키지 않기 때문에 분기 이름 대신 SHA-1과 같이 표시됩니다.

여기에 이미지 설명 입력


분리된 HEAD에서 복구하는 방법에 대한 몇 가지 옵션:


git checkout

 git checkout <commit_id> git checkout -b <new branch> <commit_id> git checkout HEAD~X // x is the number of commits t go back

이것은 원하는 커밋을 가리키는 새 분기를 체크아웃합니다. 이 명령은 주어진 커밋을 체크아웃합니다.

이 시점에서 분기를 만들고 이 시점부터 작업을 시작할 수 있습니다.

 # Checkout a given commit. # Doing so will result in a `detached HEAD` which mean that the `HEAD` # is not pointing to the latest so you will need to checkout branch # in order to be able to update the code. git checkout <commit-id> # Create a new branch forked to the given commit git checkout -b <branch name>

git reflog

reflog 도 항상 사용할 수 있습니다. git reflog HEAD 를 업데이트한 변경 사항을 표시하고 원하는 reflog 항목을 체크아웃하면 HEAD 가 이 커밋으로 다시 설정됩니다.

HEAD가 수정될 때마다 reflog

 git reflog git checkout HEAD@{...}

이렇게 하면 원하는 커밋으로 돌아갑니다.

여기에 이미지 설명 입력


git reset HEAD --hard <commit_id>

원하는 커밋으로 머리를 "이동"하십시오.

 # This will destroy any local modifications. # Don't do it if you have uncommitted work you want to keep. git reset --hard 0d1d7fc32 # Alternatively, if there's work to keep: git stash git reset --hard 0d1d7fc32 git stash pop # This saves the modifications, then reapplies that patch after resetting. # You could get merge conflicts, if you've modified things which were # changed since the commit you reset to.
  • 참고: ( Git 2.7부터 git rebase --no-autostash 도 사용할 수 있습니다.

이 스키마는 어떤 명령이 무엇을 하는지 보여줍니다. 보시다시피 reset && checkout HEAD 수정합니다.

여기에 이미지 설명 입력



답변자 : kiran boghra


다음 두 명령으로 이 작업을 수행할 수 있습니다.

 git reset --hard [previous Commit SHA id here] git push origin [branch Name] -f

이전 Git 커밋이 제거됩니다.

변경 사항을 유지하려면 다음을 사용할 수도 있습니다.

 git reset --soft [previous Commit SHA id here]

그러면 변경 사항이 저장됩니다.



답변자 : Stephen Ostermiller


"커밋을 취소"하고 마지막 커밋 메시지를 지우고 수정된 파일을 다시 스테이징 상태로 전환하려면 다음 명령을 사용합니다.

 git reset --soft HEAD~1
  • --soft 는 커밋되지 않은 파일을 삭제하는 --hard 와 반대로 작업 파일로 유지해야 함을 나타냅니다.
  • HEAD~1 은 마지막 커밋입니다. 3 커밋을 롤백하려면 HEAD~3 사용할 수 있습니다. 특정 개정 번호로 롤백하려는 경우 SHA 해시를 사용하여 롤백할 수도 있습니다.

이것은 잘못된 것을 커밋하고 마지막 커밋을 취소하려는 상황에서 매우 유용한 명령입니다.

출처: http://nakkaya.com/2009/09/24/git-delete-last-commit/



답변자 : Roman Minenok


Git에서 로컬 변경 사항을 되돌리기 위해 여러 가지 방법을 시도했지만 최신 커밋 상태로 되돌리기를 원할 때 가장 잘 작동하는 것 같습니다.

 git add . && git checkout master -f

간단한 설명:

  • git revert 처럼 커밋을 생성하지 않습니다.
  • git checkout <commithashcode> 처럼 HEAD를 분리하지 않습니다.
  • 모든 로컬 변경 사항을 무시하고 분기의 마지막 커밋 이후 추가된 모든 파일을 삭제합니다.
  • 브랜치 이름에서만 작동하므로 이 방법으로 브랜치의 최신 커밋으로만 되돌릴 수 있습니다.

위의 결과를 얻는 훨씬 더 편리하고 간단한 방법을 찾았습니다.

 git add . && git reset --hard HEAD

여기서 HEAD는 현재 분기의 최신 커밋을 가리킵니다.

boulder_ruby가 제안한 것과 동일한 코드이지만 git add . before git reset --hard HEAD 마지막 커밋 이후에 생성된 모든 새 파일을 지우려면 이것이 대부분의 사람들이 최신 커밋으로 되돌릴 때 내가 믿는 것이라고 생각하기 때문입니다.



답변자 : david.t_92


가장 좋은 방법은 다음과 같습니다.

 git reset --hard <commidId> && git push --force

이렇게 하면 분기를 특정 커밋으로 재설정한 다음 로컬에서와 동일한 커밋으로 원격 서버를 업로드합니다.

--force 플래그는 복구 옵션 없이 선택한 커밋 이후의 모든 후속 커밋을 제거하므로 주의하십시오.



답변자 : Alireza


좋아요, Git에서 이전 커밋으로 돌아가는 것은 아주 쉽습니다...

변경 사항 을 유지하지 않고 되돌리기:

 git reset --hard <commit>

변경 사항 을 유지하면서 되돌리기:

 git reset --soft <commit>

설명: git reset 사용하여 특정 상태로 재설정할 수 있습니다. 위에서 볼 수 있듯이 커밋 해시와 함께 사용하는 것이 일반적입니다.

그러나 차이점은 두 플래그를 사용하는 것입니다 --soft--hard 기본적으로 --soft 플래그를 사용하여 git reset 이지만 항상 플래그를 사용하는 것이 좋습니다. 각 플래그를 설명합니다.


--부드러운

설명된 기본 플래그는 제공할 필요가 없으며 작업 트리를 변경하지 않지만 커밋할 준비가 된 모든 변경된 파일을 추가하므로 파일 변경 사항이 준비되지 않은 커밋 상태로 돌아갑니다.


--딱딱한

이 플래그를 조심하십시오. 작업 트리와 추적된 파일에 대한 모든 변경 사항을 재설정하면 모두 사라집니다!


또한 Git으로 작업하는 실생활에서 발생할 수 있는 아래 이미지를 만들었습니다.

Git을 커밋으로 재설정



답변자 : markreyes


마스터와 해당 분기에 대해 이야기하고 있다고 가정하면(즉, 이것은 관심 있는 작업 분기가 될 수 있음):

 # Reset local master branch to November 3rd commit ID git reset --hard 0d1d7fc32e5a947fbd92ee598033d85bfc445a50 # Reset remote master branch to November 3rd commit ID git push -f origin 0d1d7fc32e5a947fbd92ee598033d85bfc445a50:master

블로그 게시물에서 답변을 찾았습니다(지금은 더 이상 존재하지 않음).

이것은 재설정하고 원격으로 변경을 강제하는 것이므로 팀의 다른 사람들이 이미 git pull을 받은 경우 문제를 일으킬 수 있습니다. 당신은 사람들이 처음에 git을 사용하는 중요한 이유인 변경 기록을 파괴하고 있습니다.

재설정보다 되돌리기(다른 답변 참조)를 사용하는 것이 좋습니다. 당신이 1인 팀이라면 그것은 아마도 중요하지 않을 것입니다.



답변자 : Lance Caraccioli


~/commits-to-revert.txt 라는 텍스트 파일에 다음 커밋이 있다고 가정해 보겠습니다( git log --pretty=oneline 을 사용하여 가져옴).

 fe60adeba6436ed8f4cc5f5c0b20df7ac9d93219 0c27ecfdab3cbb08a448659aa61764ad80533a1b f85007f35a23a7f29fa14b3b47c8b2ef3803d542 e9ec660ba9c06317888f901e3a5ad833d4963283 6a80768d44ccc2107ce410c4e28c7147b382cd8f 9cf6c21f5adfac3732c76c1194bbe6a330fb83e3 fff2336bf8690fbfb2b4890a96549dc58bf548a5 1f7082f3f52880cb49bc37c40531fc478823b4f5 e9b317d36a9d1db88bd34831a32de327244df36a f6ea0e7208cf22fba17952fb162a01afb26de806 137a681351037a2204f088a8d8f0db6e1f9179ca

각각을 되돌리는 Bash 셸 스크립트를 만듭니다.

 #!/bin/bash cd /path/to/working/copy for i in `cat ~/commits-to-revert.txt` do git revert $i --no-commit done

이렇게 하면 파일 및 디렉터리 생성, 삭제를 포함하여 모든 것이 이전 상태로 되돌려지고 분기에 커밋되고 기록은 유지되지만 동일한 파일 구조로 되돌아갑니다. Git에 git revert --to <hash> 가 없는 이유는 제가 이해할 수 없습니다.



답변자 : Community Wiki


Jefromi의 솔루션에 대한 추가 대안

Jefromi의 솔루션 은 확실히 최고의 솔루션이며 반드시 사용해야 합니다. 그러나 완전성을 위해 커밋을 되돌리는 데 사용할 수도 있는 이러한 다른 대안 솔루션도 보여주고 싶었습니다( git revert 가 하는 것처럼 이전 커밋의 변경 사항을 취소하는 새 커밋을 생성한다는 의미에서) .

분명히 말해서, 이러한 대안 은 커밋을 되돌리는 가장 좋은 방법은 아니지만 Jefromi의 솔루션은 입니다 git revert 와 동일한 결과를 얻기 위해 이러한 다른 방법을 사용할 수도 있다는 점을 지적하고 싶습니다.

대안 1: 하드 리셋 및 소프트 리셋

이것은 Git에서 SHA 해시로 커밋으로 되돌리기 위한 Charles Bailey의 솔루션의 매우 약간 수정된 버전입니다. :

 # Reset the index to the desired commit git reset --hard <commit> # Move the branch pointer back to the previous HEAD git reset --soft HEAD@{1} # Commit the changes git commit -m "Revert to <commit>"

이것은 기본적으로 소프트 리셋이 인덱스/스테이징 영역에 스테이징된 이전 커밋 상태를 남겨두고 커밋할 수 있다는 사실을 사용하여 작동합니다.

대안 2: 현재 트리를 삭제하고 새 트리로 교체

이 솔루션은 svick의 솔루션에서 이전 커밋을 체크아웃하고 새 커밋으로 만듭니다 .

 git rm -r . git checkout <commit> . git commit

대안 #1과 유사하게 이것은 현재 작업 복사본에서 <commit> git checkout <commit> 이후에 추가된 파일을 제거하지 않기 때문에 git rm 먼저 수행해야 합니다.



답변자 : Paul Walczewski


다음은 이전 커밋으로 돌아가는 훨씬 간단한 방법입니다.

 git reset HEAD~1

따라서 커밋 ID 등이 필요하지 않습니다. :)



답변자 : maytham-ɯɐɥʇʎɐɯ


주의! 이 명령은 사용자가 실수로 잘못된 커밋을 입력한 경우 커밋 기록을 잃을 수 있습니다. 실수를 할 경우를 대비하여 조금 더 안전한 것보다 항상 다른 곳에 추가 백업을 해두십시오. :)

비슷한 문제가 있었고 이전 커밋으로 되돌리고 싶었습니다. 제 경우에는 최신 커밋을 유지하는 데 관심이 없었으므로 Hard 사용했습니다.

이것이 내가 한 방법입니다.

 git reset --hard CommitId && git clean -f

이것은 로컬 리포지토리로 git push -f 를 사용한 후 원격 리포지토리를 업데이트합니다.

 git push -f

예를 들어, 다음 이미지에서 enforce non-group manage policies 을 적용하는 이름의 커밋을 완전히 무시하려는 경우

여기에 이미지 설명 입력

당신은 달릴 것입니다

 git reset --hard dd52eb9 && git clean -f

뒤이어

 git push -f

그 후에는 커밋( enforce non-group manage policies )을 볼 수 없습니다.

여기에 이미지 설명 입력



답변자 : sivi


모든 변경 후에 이러한 모든 명령을 푸시할 때 다음을 사용해야 할 수 있습니다.

 git push -f ...

git push 뿐만이 아닙니다.



답변자 : Shadow Man


특히 이전 커밋을 되돌리고 스테이징하기 위한 명령(코어 Git의 일부가 아니지만 git-extras 패키지에 있음)이 있습니다.

 git back

매뉴얼 페이지 에 따라 다음과 같이 사용할 수도 있습니다.

 # Remove the latest three commits git back 3


답변자 : Nanhe Kumar


이 모든 초기 단계를 직접 완료하고 Git 리포지토리로 다시 푸시할 수 있습니다.

  1. git pull --all 명령을 사용하여 Bitbucket에서 최신 버전의 저장소를 가져옵니다.

  2. -n 4 를 사용하여 Git 로그 명령을 실행합니다. -n 뒤의 숫자는 로컬 기록의 가장 최근 커밋부터 시작하여 로그의 커밋 수를 결정합니다.

     $ git log -n 4
  3. git reset --hard HEAD~N 사용하여 저장소 기록 헤드를 재설정합니다. 여기서 N은 헤드를 되돌리려는 커밋 수입니다. 다음 예에서 헤드는 리포지토리 기록의 마지막 커밋으로 한 커밋을 다시 설정합니다.

  4. git push --force 를 사용하여 변경 사항을 Git 리포지토리로 푸시하여 변경 사항을 강제 푸시합니다.

Git 리포지토리를 이전 커밋으로 지정하려면 다음을 수행합니다.

 git pull --all git reset --hard HEAD~1 git push --force


답변자 : tonythomas01


필요한 커밋을 선택하고 다음으로 확인하십시오.

 git show HEAD git show HEAD~1 git show HEAD~2

필요한 커밋을 얻을 때까지. HEAD가 그것을 가리키도록 하려면 다음을 수행하십시오.

 git reset --hard HEAD~1

또는 git reset --hard HEAD~2 또는 무엇이든.



답변자 : Mohammed Irfan Tirupattur


가장 최근 커밋으로 되돌리고 모든 로컬 변경 사항을 무시합니다.

 git reset --hard HEAD


답변자 : mike rodent


상황이 긴급한 상황이고 프로젝트가 예를 들어 "my project"라는 디렉토리 아래에 있다고 가정하고 질문자가 요청한 것을 빠르고 더러운 방식으로 수행하려는 경우:


QUICK AND DIRTY : 상황에 따라 빠르고 더티는 실제로 매우 GOOD일 수 있습니다. 여기서 내 솔루션은 작업 디렉토리에 있는 파일을 .git/ 디렉토리 아래에 숨어 있는 git 저장소의 깊이에서 끌어올린/추출한 파일로 돌이킬 수 없을 정도로 교체 하지 않습니다. 많은. 재난 상황으로 보일 수 있는 상황을 복구하기 위해 그러한 심해 다이빙을 할 필요가 없으며 충분한 전문 지식 없이 그렇게 하려고 시도하면 치명적일 수 있습니다 .


  1. 전체 디렉토리를 복사하고 "my project - copy"와 같이 다른 이름으로 부르십시오. git 저장소("repo") 파일이 "my project" 디렉토리(기본 위치, ".git"이라는 디렉토리 아래)에 있다고 가정하면 이제 작업 파일과 repo 파일을 모두 복사한 것입니다.

  2. "내 프로젝트" 디렉토리에서 다음을 수행하십시오.

     .../my project $ git reset --hard [first-4-letters&numbers-of-commit's-SHA]

이렇게 하면 "내 프로젝트" 아래의 저장소 상태를 커밋 당시의 상태로 되돌립니다("커밋"은 작업 파일의 스냅샷을 의미합니다). 그 이후의 모든 커밋은 "내 프로젝트"에서 영원히 손실되지만 .../.git 아래에 있는 파일을 포함하여 해당 파일을 모두 복사했기 때문에 "내 프로젝트 - 복사" 아래의 저장소에 여전히 존재합니다. /.

그런 다음 시스템에 두 가지 버전이 있습니다... 이전 커밋에서 관심 있는 파일 등을 검사하거나 복사하거나 수정할 수 있습니다. 복원된 커밋이 아무데도 진행되지 않았기 때문에 새 작업을 결정했다면 "내 프로젝트 - 복사" 아래에 있는 파일을 완전히 삭제할 수 있습니다.

검색된 커밋이 디렉토리 이름을 다시 변경하는 것이기 때문에 실제로 작업을 버리지 않고 프로젝트 상태를 계속 유지하려면 검색된 커밋이 포함된 프로젝트를 삭제(또는 임시 이름 지정)하고 " 내 프로젝트 - 복사" 디렉토리를 다시 "내 프로젝트"로 복사합니다. 그런 다음 여기에서 다른 답변 중 일부를 이해하려고 시도하고 곧 다른 커밋을 수행할 수 있습니다.

Git은 훌륭한 창조물이지만 아무도 "즉석에서 집어들" 수 없습니다. 또한 너무 자주 설명하려고 하는 사람들은 다른 VCS[버전 제어 시스템]에 대한 사전 지식을 가정하고 너무 깊이 파고듭니다. 너무 빨리, 그리고 "체크 아웃"에 대해 상호 교환 가능한 용어를 사용하는 것과 같은 다른 범죄를 저지르는 경우가 있습니다.

스트레스를 많이 받으려면 내 상처에서 배우십시오. Git에 대한 책을 거의 읽어야 합니다 . "Git으로 버전 관리"를 권장합니다. 더 늦기 전에 빨리하십시오. 그렇다면 Git의 복잡성 중 많은 부분이 분기 및 재병합에서 비롯된다는 점을 명심하십시오. 어떤 책에서든 해당 부분을 건너뛸 수 있습니다. 당신의 질문에 따르면 사람들이 과학으로 당신의 눈을 멀게 할 이유 가 없습니다.

특히 예를 들어 이것이 절망적인 상황이고 Git을 처음 사용하는 경우!

추신: 또 다른 생각: 작업 파일이 있는 디렉토리가 아닌 다른 디렉토리에 Git 저장소를 유지하는 것은 (지금) 실제로 매우 간단합니다. 즉, 위의 빠르고 더티한 솔루션을 사용하여 전체 Git 저장소를 복사할 필요가 없습니다. 여기 --separate-git-dir 사용하여 Fryer의 답변을 참조하십시오. 그러나 경고 : 복사하지 않는 "별도의 디렉토리" 저장소가 있고 하드 리셋을 수행하는 경우 절대적으로 해야 하는 것처럼 리포지토리를 정기적으로 백업하는 것이 좋습니다. 특히 클라우드(예: Google 드라이브 )에 다른 위치에 저장하는 것이 좋습니다.

"클라우드에 백업"이라는 주제에 대해 다음 단계는 GitHub 또는 (내 견해로는 더 나은) GitLab으로 계정(물론 무료)을 여는 것입니다. 그런 다음 정기적으로 git push 명령을 수행하여 Cloud repo를 "적절하게" 최신 상태로 만들 수 있습니다. 그러나 다시, 이것에 대해 이야기하는 것은 너무 성급할 수 있습니다.



답변자 : Point Networks


이것은 최근 커밋으로 직접 재설정하는 또 다른 방법입니다.

 git stash git stash clear

마지막 커밋 이후에 수행한 모든 변경 사항을 직접 지웁니다.

추신: 약간의 문제가 있습니다. 또한 최근에 저장한 모든 숨김 변경 사항을 삭제합니다. 대부분의 경우 중요하지 않아야 한다고 생각합니다.



답변자 : Sireesh Yarlagadda


되돌리기는 커밋을 롤백하는 명령입니다.

 git revert <commit1> <commit2>

견본:

 git revert 2h3h23233

아래와 같이 HEAD에서 범위를 취할 수 있습니다. 여기서 1은 "마지막 커밋 되돌리기"라고 말합니다.

 git revert HEAD~1..HEAD

그리고 다음을 수행하십시오.

 git push


답변자 : Chris Moschini


실수로 인한 변경 사항으로부터 코더의 디렉토리를 완전히 정리하기 위해 다음을 사용했습니다.

 git add -A . git reset --hard HEAD

git reset --hard HEAD 는 수정 사항을 제거하지만 "새" 파일은 제거하지 않습니다. 그들의 경우에는 실수로 중요한 폴더를 임의의 위치로 드래그했고 해당 파일은 모두 Git에서 새 파일로 처리되었으므로 reset --hard 수정하지 않았습니다. git add -A . 를 실행하여. 사전에 git으로 모두 명시적으로 추적하여 재설정으로 지워졌습니다.



답변자 : nevster


어떤 사람들은 마스터에서 커밋된 변경 사항을 롤백하는 방법을 알고 싶어 이 질문에 올 수 있다고 생각합니다. 즉, 모든 것을 버리고 원본/마스터로 돌아가려면 다음을 수행하십시오.

 git reset --hard origin/master

https://superuser.com/questions/273172/how-to-reset-master-to-origin-master



답변자 : Vishnu Atrai


HEAD에 대한 이전 커밋의 변경 사항을 유지하고 이전 커밋으로 이동하려면 다음을 수행합니다.

 git reset <SHA>

HEAD에 대한 이전 커밋에서 변경 사항이 필요하지 않고 모든 변경 사항을 취소하는 경우 다음을 수행합니다.

 git reset --hard <SHA>


답변자 : optimistanoop


원하는 커밋으로 재설정해 보세요.

 git reset <COMMIT_ID>

COMMIT_ID를 확인하려면 COMMIT_ID 사용하십시오.

 git log

이렇게 하면 변경된 모든 파일이 추가되지 않은 상태로 재설정됩니다.

이제 다음을 통해 추가되지 않은 모든 파일을 checkout 할 수 있습니다.

 git checkout .

변경 사항을 확인하려면 다음을 사용하십시오.

 git log

업데이트

리포지토리에 커밋이 하나만 있는 경우 시도하십시오.

 git update-ref -d HEAD


답변자 : Willi Mentzel


아이디어: 기본적으로 현재 작업 트리 상태를 이전 커밋의 상태로 바꾸고 커밋을 만들고 싶습니다. 무시된 파일은 변경하지 않는 것이 가장 좋습니다. 방법은 다음과 같습니다.

  1. 작업 트리 *를 비웁니다.

     git rm -r --cached . && git clean -f -d
  2. 작업 트리를 원하는 상태로 가져옵니다 **.

     git checkout 0d1d7fc3 .
  3. 되돌리기 커밋을 만듭니다.

     git add --all && git commit -m "revert to 0d1d7fc3"

처음에는 Yarins 답변 이 가장 좋을 것이라고 생각했지만 병합 커밋에는 작동하지 않습니다. 이 솔루션은 가능합니다.

또한 기록에서 (푸시 또는 업푸시) 삭제하지 않습니다. 되돌리려는 상태를 나타내는 하나의 깨끗한 커밋을 생성합니다.


* 작업 트리에서 추적되지 않았지만 무시되지 않은 파일( .gitignore 에 지정된 파일)을 제거합니다. 작업 트리는 유지하려는 무시된 파일을 제외하고 비어 있습니다( clean -x 옵션을 지정하지 않은 경우).

** 경로가 지정되면(여기: . ), 체크아웃은 HEAD만 남겨둡니다.



답변자 : George Ninan


커밋이 원격으로 푸시되면 제거해야 합니다. 귀하의 분기가 개발 중이고 그것이 origin 에 대해 푸시되었다고 가정하겠습니다.

먼저 오리진 에서 개발 을 제거해야 합니다.

 git push origin :develop (note the colon)

그런 다음 원하는 상태로 개발해야 합니다. 커밋 해시가 EFGHIJK라고 가정하겠습니다.

 git reset --hard EFGHIJK

마지막으로 다시 개발을 푸시합니다.

 git push origin develop


답변자 : Jagraj Singh


롤백(또는 되돌리기):

 1. git revert --no-commit "commit-code-to-remove" HEAD (eg git revert --no-commit d57a39d HEAD) 2. git commit 3. git push

위의 두 단계를 시도하고 이것이 원하는 경우 git push .

잘못된 것을 발견하면 다음을 수행하십시오.

 git revert --abort


출처 : Here


출처 : http:www.stackoverflow.com/questions/4114095/how-do-i-revert-a-git-repository-to-a-previous-commit">

반응형