'Git Reset-Head'를 사용하여 이전의 커밋으로 되돌리려면 어떻게합니까?[복제]

StackOverflow https://stackoverflow.com/questions/9529078

문제

이 질문은 이미 여기에 답변이 있습니다 :

  • Git 저장소를 이전 커밋으로 되돌립니다. 42 답변

    git이 내 응용 프로그램에 대한 변경 사항을 추적하는 것을 알고 있으며 변경 사항을 저 지르기 전까지는 그들에게 보유하고 있습니다.

    이전의 커밋으로 되돌리려면 다음을 사용합니다.

    git reset --hard HEAD
    .

    및 git 반환 값 :

    HEAD is now at 820f417 micro
    
    .

    하드 드라이브의 파일을 어떻게 이전 커밋으로 되돌릴 수 있습니까?

    내 다음 단계는 다음과 같습니다 :

    git add .
    git commit -m "revert"
    
    .

    그러나 내 하드 드라이브에서 파일이 변경되지 않았습니다 ...

    나는 무엇을 옳고 그 짓는가?

도움이 되었습니까?

해결책

First, it's always worth noting that git reset --hard is a potentially dangerous command, since it throws away all your uncommitted changes. For safety, you should always check that the output of git status is clean (that is, empty) before using it.

Initially you say the following:

So I know that Git tracks changes I make to my application, and it holds on to them until I commit the changes, but here's where I'm hung up:

That's incorrect. Git only records the state of the files when you stage them (with git add) or when you create a commit. Once you've created a commit which has your project files in a particular state, they're very safe, but until then Git's not really "tracking changes" to your files. (for example, even if you do git add to stage a new version of the file, that overwrites the previously staged version of that file in the staging area.)

In your question you then go on to ask the following:

When I want to revert to a previous commit I use: git reset --hard HEAD And git returns: HEAD is now at 820f417 micro

How do I then revert the files on my hard drive back to that previous commit?

If you do git reset --hard <SOME-COMMIT> then Git will:

  • Make your current branch (typically master) back to point at <SOME-COMMIT>.
  • Then make the files in your working tree and the index ("staging area") the same as the versions committed in <SOME-COMMIT>.

HEAD points to your current branch (or current commit), so all that git reset --hard HEAD will do is to throw away any uncommitted changes you have.

So, suppose the good commit that you want to go back to is f414f31. (You can find that via git log or any history browser.) You then have a few different options depending on exactly what you want to do:

  • Change your current branch to point to the older commit instead. You could do that with git reset --hard f414f31. However, this is rewriting the history of your branch, so you should avoid it if you've shared this branch with anyone. Also, the commits you did after f414f31 will no longer be in the history of your master branch.
  • Create a new commit that represents exactly the same state of the project as f414f31, but just adds that on to the history, so you don't lose any history. You can do that using the steps suggested in this answer - something like:

    git reset --hard f414f31
    git reset --soft HEAD@{1}
    git commit -m "Reverting to the state of the project at f414f31"
    

다른 팁

WARNING: git clean -f will remove untracked files, meaning they're gone for good since they aren't stored in the repository. Make sure you really want to remove all untracked files before doing this.


Try this and see git clean -f.

git reset --hard will not remove untracked files, where as git-clean will remove any files from the tracked root directory that are not under Git tracking.

Alternatively, as @Paul Betts said, you can do this (beware though - that removes all ignored files too)

  • git clean -df
  • git clean -xdf CAUTION! This will also delete ignored files
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top