file 옵션 - Git에서 한 파일의 작업 사본 수정을 취소 하시겠습니까?




checkout -b (11)

마지막으로 커밋 한 후 작업 복사본에서 많은 파일을 수정했지만 가장 최근의 커밋과 동일한 상태로 다시 설정하는 것처럼 해당 파일 중 하나의 변경 사항을 취소하고 싶습니다.

그러나, 그저 하나의 파일 만 작업 복사본의 변경 사항을 원상태로 되돌리고 싶습니다.

어떻게해야합니까?


Answers

이 답변은 동일한 또는 여러 폴더 (또는 디렉토리)의 여러 특정 파일에있는 로컬 변경 사항 취소를 취소하는 데 필요한 명령에 대한 것입니다. 이 답변은 특히 사용자가 두 개 이상의 파일을 가지고 있지만 사용자가 모든 로컬 변경 사항을 실행 취소하지 않으려는 질문을 해결합니다.

하나 이상의 파일이있는 경우 각각의 위치를 ​​공백으로 구분하여 나열하여 samne 명령 ( git checkout -- file )을 각 git checkout -- file 적용 할 수 있습니다.

git checkout -- name1/name2/fileOne.ext nameA/subFolder/fileTwo.ext

name1 / name2 / fileOne.ext nameA / subFolder / fileTwo.ext 사이에 공백을 두십시오.

같은 폴더에있는 여러 파일의 경우 :

특정 디렉토리의 모든 파일에 대한 변경 사항을 삭제해야하는 경우 다음과 같이 git checkout을 사용하십시오.

git checkout -- name1/name2/*

위의 별표는 name1 / name2 아래의 해당 위치에있는 모든 파일을 실행 취소하는 트릭입니다.

그리고 다음과 마찬가지로 여러 폴더의 모든 파일에서 변경 사항을 취소 할 수 있습니다.

git checkout -- name1/name2/* nameA/subFolder/*

위의 name1 / name2 / * nameA / subFolder / * 사이의 공간을 다시 생각해보십시오.

참고 : name1, name2, nameA, subFolder -이 모든 예제 폴더 이름은 해당 파일이 상주 할 수있는 폴더 또는 패키지를 나타냅니다.


당신이 사용할 수있는

git checkout -- file

-- (nimrodm이 제안한 것처럼)없이 할 수 있지만 파일 이름이 브랜치 나 태그 (또는 다른 개정 식별자)처럼 보이면 혼란 스러울 수 있으므로 -- 사용하는 것이 가장 좋습니다.

특정 버전의 파일을 체크 아웃 할 수도 있습니다.

git checkout v1.2.3 -- file         # tag v1.2.3
git checkout stable -- file         # stable branch
git checkout origin/master -- file  # upstream master
git checkout HEAD -- file           # the version from the most recent commit
git checkout HEAD^ -- file          # the version before the most recent commit

아직 커밋하지 않았거나 커밋을 공유하지 않은 경우 :

git diff --stat HEAD^...HEAD | \
fgrep filename_snippet_to_revert | cut -d' ' -f2 | xargs git checkout HEAD^ --
git commit -a --amend

git checkout <commit> <filename>

왜냐하면 나는 내 favicon이 내가 drupal 6.10으로 승격되었을 때 약간의 커밋을 덮어 썼다는 것을 깨달았 기 때문에 이것을 사용했다. 그래서 나는 그것을 되돌려 놓아야했다. 여기 내가 한 일이있다.

git checkout 088ecd favicon.ico

나를 위해서만이 사람은 일했다.

git checkout -p filename


한 파일에 대한 이전 커밋의 변경 사항을 실행 취소하려면 다음을 시도하십시오.

git checkout branchname^ filename

마지막 커밋 이전의 파일을 체크 아웃합니다. 좀 더 커밋을하고 싶다면, branchname~n 표기법을 사용하십시오.


나는 git bash를 완료했다 :

(use "git checkout -- <file>..." to discard changes in working directory)

  1. 힘내 상태. [그래서 우리는 하나의 파일이 수정 된 것을 보았습니다.]
  2. 자식 체크 아웃 - index.html [나는 index.html 파일에서 변경 :
  3. 자식 상태 [이제 그 변경 사항이 제거되었습니다]


나는 항상 이것과 혼란스러워, 여기 미리 알림 테스트 케이스가있다; git 를 테스트 할 bash 스크립트가 있다고 가정 해 봅시다.

set -x
rm -rf test
mkdir test
cd test
git init
git config user.name test
git config user.email [email protected]
echo 1 > a.txt
echo 1 > b.txt
git add *
git commit -m "initial commit"
echo 2 >> b.txt
git add b.txt
git commit -m "second commit"
echo 3 >> b.txt

이 시점에서 변경 사항은 캐시에 저장되지 않으므로 git status 는 다음과 같습니다.

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

    modified:   b.txt

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

이 시점에서 우리는 git checkout 을 수행하면 결과는 다음과 같습니다.

$ git checkout HEAD -- b.txt
$ git status
On branch master
nothing to commit, working directory clean

대신 git reset 을 수행하면 결과는 다음과 같습니다.

$ git reset HEAD -- b.txt
Unstaged changes after reset:
M   b.txt
$ git status
On branch master
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

    modified:   b.txt

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

따라서,이 경우 - 변경 사항이 준비되지 않은 경우 git reset 은 아무런 차이가 없으며 git checkout 은 변경 사항을 덮어 씁니다.

위의 스크립트에서 마지막으로 변경 한 내용이 staged / cached라고 git add b.txtgit add b.txt . 즉, 끝에 git add b.txtgit add b.txt .

이 경우, git status 는 다음과 같습니다.

$ git status
On branch master
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

    modified:   b.txt

이 시점에서 우리는 git checkout 을 수행하면 결과는 다음과 같습니다.

$ git checkout HEAD -- b.txt
$ git status
On branch master
nothing to commit, working directory clean

대신 git reset 을 수행하면 결과는 다음과 같습니다.

$ git reset HEAD -- b.txt
Unstaged changes after reset:
M   b.txt
$ git status
On branch master
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

    modified:   b.txt

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

그래서,이 경우 - 변경 사항이 준비되면 git reset 은 기본적으로 무단 변경에 대한 단계적 변경을 수행합니다 - git checkout 은 변경 사항을 완전히 덮어 씁니다.


SHA id를 사용하여 파일을 복원합니다. git checkout <sha hash id> <file name>


그냥 사용하십시오.

git checkout filename

그러면 filename이 현재 분기의 최신 버전으로 바뀝니다.

경고 : 변경 사항은 무시되며 백업은 유지되지 않습니다.


아직 커밋하지 않은 경우에만 사용할 수 있습니다.

$ git checkout -f

병합 (및 모든 작업)을 취소합니다.





git file version-control dvcs undo