파일을 특정 개정으로 재설정하거나 되돌리려면 어떻게해야합니까?


4513

파일 그룹의 일부로 몇 번 커밋 된 파일을 일부 변경했지만 이제 변경 내용을 이전 버전으로 다시 설정 / 되돌리려 고합니다.

필자는 필요한 개정을 찾기 위해 a git log와 함께 수행 git diff했지만 파일을 과거의 이전 상태로 되 돌리는 방법을 모릅니다.


11
복귀 후 --cached확인시 잊지 마십시오 git diff. 링크
Geoffrey Hale

5
내가봤을 때 당신의 질문을 찾았습니다. 그러나 솔루션을 읽은 후 로그를 확인하고 독립 실행 형 커밋으로 thouse 변경 사항을 확인 했으므로 해당 커밋에 대해 git revert를 만들고 다른 모든 것은 내가 원하는대로 유지되었습니다. 해결책이 아니라 때로는 다른 방법입니다.
sudo97

답변:


6132

원하는 커밋의 해시를 가정하면 다음과 c5f567같습니다.

git checkout c5f567 -- file1/to/restore file2/to/restore

자식 체크 아웃 설명서 페이지에 자세한 정보를 제공합니다.

전에 커밋으로 되돌리려면 c5f567append를 추가하십시오 ~1(여기서 1은 되돌릴 커밋 수입니다).

git checkout c5f567~1 -- file1/to/restore file2/to/restore

부수적으로, 나는이 명령이 평범한 것 (분 기간 변경)과 비정상적이고 파괴적인 것 (작업 디렉토리의 변경 사항 무시) 모두에 사용되기 때문에 항상 불편했습니다.


12
@ shadowhand : 그것을 뒤집을 수있는 방법이 있습니까? 그래서 바로 버전입니다?
aliteralmind

16
@aliteralmind : 아니요, 불행히도 Git 히스토리 바로 가기 표기법은 히스토리에서 거꾸로 돌아갑니다.
Greg Hewgill

46
abcde에 분기 이름을 사용 develop하려는 경우 git checkout develop -- file/to/restore( 예 :) 원할 것입니다 (이중 대시 참고)
Ohad Schneider

8
@aliteralmind : 사실, 그렇습니다. "git log --reverse -1 --ancestry-path yourgitrev..master"하고 적절한 옵션을 사용하여 git rev를 얻으십시오. --ancestry-path는 두 커밋 사이에 "선을 그립니다"-1은 하나의 버전 만 표시하고 --reverse는 첫 번째로 생성 된 항목이 가장 오래된 항목임을 확인합니다.
Chris Cogdon

6
개인적으로 HEAD ^ HEAD ~ 1 :)보다 입력하기가 쉽다는 것을
알았습니다

606

diff 명령을 사용하여 파일의 변경 사항을 신속하게 검토 할 수 있습니다.

git diff <commit hash> <filename>

그런 다음 특정 파일을 해당 커밋으로 되돌리려면 reset 명령을 사용하십시오.

git reset <commit hash> <filename>

--hard로컬로 수정 한 경우이 옵션 을 사용해야합니다 .

웨이 포인트 관리를위한 좋은 워크 플로우는 태그를 사용하여 타임 라인에서 포인트를 깔끔하게 표시하는 것입니다. 나는 당신의 마지막 문장을 이해할 수 없지만 당신이 원하는 것은 이전 시점에서 분기를 분기하는 것입니다. 이렇게하려면 편리한 체크 아웃 명령을 사용하십시오.

git checkout <commit hash>
git checkout -b <new branch name>

그런 다음 변경 사항을 병합 할 준비가되면 메인 라인을 기준으로 리베이스 할 수 있습니다.

git checkout <my branch>
git rebase master
git checkout master
git merge <my branch>

7
'git checkout <commit hash>'명령을 사용하면 Thanks Chris를 검색 한 이전 버전의 프로젝트를 다시 제공했습니다.
vidur punj

48
파일을 되 돌리는 git checkout <commit hash> <filename>것이 나에게 더 효과적이었다git reset
Motti Strom

3
잘못 선택된 복사 / 붙여 넣기로 150 줄을 덮어 썼기 때문에 단일 파일의 초기 버전을 원했습니다. git checkout <commit hash> <filename>나를 위해 일했다. 이것은 정답이 아닙니다. IMHO. git reset하지 않았다.
harperville

24
git reset단일 파일을 재설정 하는 데 사용할 수없는 경우 오류가 발생합니다fatal: Cannot do hard reset with paths
slier

13
더 현명한 말 : 당신은 할 수 없습니다 git reset --hard <commit hash> <filename>. 이 의지 오류 fatal: Cannot do hard reset with paths.무엇은 Motti 스트롬은 말했다 : 사용git checkout <commit hash> <filename>
호크 아이 파커

366

가장 편리한 경우 SHA-1을 포함하여 git commit에 대한 참조를 사용할 수 있습니다. 요점은 명령이 다음과 같다는 것입니다.

git checkout [commit-ref] -- [filename]


22
이 답변 --과 그렇지 않은 답변의 차이점은 무엇입니까 ?
2rs2ts

80
git에서 파일 목록 앞의 '-'는 git에 다음의 모든 인수가 branch-names 또는 다른 이름이 아닌 파일 이름으로 해석되어야한다는 것을 git에 알려줍니다. 때때로 도움이되는 명확성입니다.
foxxtrot

49
'-'는 git 규칙 일뿐만 아니라 * nix 명령 줄의 다양한 곳에서 찾을 수 있습니다. rm -- -f(라는 파일을 제거하십시오 -f)가 표준 예인 것 같습니다. 여기에 더 세부
호크 아이 파커

7
@HawkeyeParker가 말한 것에 덧붙여 rm명령은 getopt (3)을 사용하여 인수를 구문 분석합니다. getopt명령 인수를 구문 분석하는 명령입니다. gnu.org/software/libc/manual/html_node/Getopt.html
Devy

2
@Honey 네, 그것이 의미하는 바입니다. 예, 아마도 일반적이지 않을 것입니다. 나는 여러 곳에서 그 예를 보았을 것입니다. 어쩌면 기억에 남을만한 것으로 만들 수 있습니다. rm -f는 무섭거나 위험한 것으로 잘 알려져 있습니다. 그러나 요점은 * nix에서 파일 이름 '-'로 시작할 있으며, 이는 '-'를 볼 때 명령 옵션이 따를 것으로 예상하는 다양한 명령 줄 인터프리터를 혼동합니다. '-'로 시작하는 파일 일 수 있습니다. 예를 들어 "-mySpecialFile"과 같습니다.
Hawkeye Parker

287
git checkout -- foo

fooHEAD로 재설정 됩니다. 당신은 또한 수:

git checkout HEAD^ foo

다시 한 번 수정하는 등


12
디렉토리 나 파일과 같은 특별한 것이 git checkout -- foo있다면 실수를 피하기 위해 구문 을 사용하는 것이 좋습니다 . git을 사용하면 확실하지 않은 경우 항상 모든 파일과 디렉토리 앞에 특수 인수를 붙 입니다. foo-f--
Mikko Rantalainen

8
Mikko의 의견에 대한 추가 참고 사항 --은 git 명령이 아니며 git에 특별하지 않습니다. 명령 옵션의 끝을 나타 내기 위해 내장 된 bash입니다. 다른 많은 bash 명령과 함께 사용할 수도 있습니다.
matthaeus

14
@ matthaeus 또한 bash 또는 셸 기능에만 국한되지 않습니다. 많은 다른 명령으로 구현되고 getopt에서 지원되는 규칙입니다.
Greg Hewgill

2
아니요, bash에는 내장 특수 단어 --아닙니다 . 그러나 많은 명령 줄 파서에서 지원하고 git을 포함한 많은 CLI에서 사용하는 일반적인 규칙입니다.
Emil Lundberg

123

가장 빈번하게 필요한 최종 커밋 된 버전으로 되돌리려면이 간단한 명령을 사용할 수 있습니다.

git checkout HEAD file/to/restore

2
이것 (git checkout HEAD file / to / restore)과 git reset --hard file / to / restore의 차이점은 무엇입니까 ???
Motti Shneor

2
1) 좀 더 일반적인 방법으로 기억하기 쉬움 2) 파일 이름을 입력하기 전에 Enter를 누를 필요가 없습니다
Roman Susi

105

나는 지금 똑같은 문제를 겪었고이 대답 을 이해하는 commit-ref것이 가장 쉽다는 것을 알았습니다 ( 이동하려는 로그 변경의 SHA 값은 다음과 같습니다).

git checkout [commit-ref] [filename]

이전 버전을 작업 디렉토리에 넣고 원하는 경우 커밋 할 수 있습니다.


91

되돌아 가야하는 커밋 수를 알고 있으면 다음을 사용할 수 있습니다.

git checkout master~5 image.png

이것은 당신이 master지점에 있고 원하는 버전이 5 커밋 이라고 가정합니다 .


80

나는 그것을 발견했다고 생각한다 .... http://www-cs-students.stanford.edu/~blynn/gitmagic/ch02.html

때로는 돌아가서 특정 지점을 지나는 모든 변경 사항을 잊고 싶을 수도 있습니다.

로 시작 :

$ git log

최근 커밋 목록과 SHA1 해시가 표시됩니다.

다음을 입력하십시오.

$ git reset --hard SHA1_HASH

주어진 커밋으로 상태를 복원하고 레코드에서 모든 최신 커밋을 영구적으로 삭제합니다.


24
힘내는 아무것도 제거하지 않습니다. 이전 커밋은 여전히 ​​존재하지만 지점 팁이 없으면 더 이상 도달 할 수 없습니다. git reflog는 git-gc로 저장소를 정리할 때까지 계속 표시합니다.
Bombe

1
@Bombe : 정보 감사합니다. 이전 버전의 파일을 확인했습니다. 귀하의 의견을 읽은 후 "gitref"를 사용하여 부분 SHA1 해시를 조회하고 "checkout"을 사용하여 최신 버전으로 돌아갈 수있었습니다. 다른 git 사용자는이 정보가 도움이 될 수 있습니다.
윈스턴 C. 양

4
아마git push --force
bshirley

4
커밋되지 않은 변경 사항 있으면 git reset --hard
Boklucius

5
@Bombe- "Git은 아무것도 제거하지 않습니다. 이전 커밋은 여전히 ​​존재하지만,이를 가리키는 브랜치 팁이 없으면 더 이상 도달 할 수 없습니다." -그러나 이와 같은 커밋은 일정 시간이 지나면 정리되므로 "Git never remove anything"은 사실이 아닙니다.
Bulwersator

61

이것은 나를 위해 일했다 :

git checkout <commit hash> file

그런 다음 변경 사항을 커밋하십시오.

git commit -a

54

"롤백"이라고 말할 때주의해야합니다. 커밋 $ A에 한 버전의 파일이 있고 나중에 두 개의 별도 커밋 $ B와 $ C에서 두 가지 변경을 한 경우 (파일의 세 번째 반복이 표시됨) " 첫 번째로 롤백하고 싶습니다. 정말로 그렇습니까?

두 번째와 세 번째 반복 모두의 변경 사항을 제거하려면 매우 간단합니다.

$ git checkout $A file

그런 다음 결과를 커밋합니다. 명령은 "커밋 $ A에 의해 기록 된 상태에서 파일을 체크 아웃하고 싶습니다"라고 묻습니다.

반면에, 당신이 의미하는 것은 $ C가 파일에 수행 한 것을 유지하면서 두 번째 반복 (예 : commit $ B)으로 인한 변경을 제거하는 것입니다.

$ git revert $B

커밋 $ B를 만든 사람은 매우 규율이없고 동일한 커밋에서 완전히 관련이없는 변경을 커밋했을 수 있으며,이 되돌리기는 문제 가있는 파일 이 아닌 다른 파일 을 건드릴 수 있으므로 수행 후 결과를주의 깊게 확인하고 싶을 수 있습니다 그래서.


나는 이것을했지만 "git log file"은 내가 원래 커밋 HEAD에 있다고 말할 것입니다. "git checkout"이 실패한 것 같습니다. 그러나 git 상태는 파일이 실제로 변경되었음을 나타내고 "git diff --staged file"은 실제 변경을 보여줍니다. 또한 "git status"는 파일도 변경되었음을 보여줍니다. 따라서 어떤 파일이 변경되었는지 추적하기 위해 "git log"를 사용하지 마십시오.
Frederick Ollinger

37

git checkout foo작업 사본이 디렉토리에 있으면 재미있게 작동하지 않습니다 foo. 그러나, git checkout HEAD foo그리고 둘 다 git checkout ./foo:

$ pwd
/Users/aaron/Documents/work/foo
$ git checkout foo
D   foo
Already on "foo"
$ git checkout ./foo
$ git checkout HEAD foo

26
또는git checkout -- foo
knittl

32

rebase작동 방식 은 다음과 같습니다 .

git checkout <my branch>
git rebase master
git checkout master
git merge <my branch>

당신이 가지고 있다고 가정

---o----o----o----o  master
    \---A----B       <my branch>

처음 두 명령 ... 커밋 git checkout git rebase master

... 지점에 적용 할 변경 지점을 확인하십시오 master. rebase명령에서 커밋한다 <my branch>(에없는 master의 머리에) 및 다시 적용을 master. 즉, 첫 커밋의 부모 <my branch>는 더 이상 master히스토리 에서 이전 커밋이 아니라의 현재 헤드입니다 master. 두 명령은 다음과 같습니다.

git rebase master <my branch>

"base"및 "modify"분기가 모두 명시 적이므로이 명령을 기억하는 것이 더 쉬울 수 있습니다.

. 최종 히스토리 결과는 다음과 같습니다.

---o----o----o----o   master
                   \----A'----B'  <my branch>

마지막 두 명령 ...

git checkout master
git merge <my branch>

... 모든 <my branch>변경 사항을에 적용하려면 빨리 감기를 수행하십시오 master. 이 단계가 없으면 rebase 커밋이에 추가되지 않습니다 master. 최종 결과는 다음과 같습니다.

---o----o----o----o----A'----B'  master, <my branch>

master그리고 <my branch>둘 다 참조 B'. 또한이 시점에서 <my branch>참조 를 삭제하는 것이 안전합니다 .

git branch -d <my branch>

26

git v2.23.0부터는 새로운 git restore 방법이 있는데, git checkout책임 있는 것의 일부를 가정 합니다 (허용 된 대답 git checkout은 상당히 혼란 스럽습니다). github 블로그의 주요 변경 사항을 참조하십시오 .

이 명령의 기본 동작은 source매개 변수 에서 오는 내용 (커밋 해시) 으로 작업 트리의 상태를 복원하는 것입니다.

따라서 Greg Hewgill의 답변 (커밋 해시가 있다고 가정 c5f567)에 따라 명령은 다음과 같습니다.

git restore --source=c5f567 file1/to/restore file2/to/restore

또는 c5f567 이전에 하나의 커밋 내용으로 복원하려는 경우 :

git restore --source=c5f567~1 file1/to/restore file2/to/restore

24

대상 파일의 첫 번째 재설정 헤드

git reset HEAD path_to_file

해당 파일을 두 번째 체크 아웃

git checkout -- path_to_file

4
+1, HEAD 재설정 의도가 확실하지 않습니다. 필요할 수도 있고 필요하지 않을 수도 있습니다. 내 상황에서 나는 하나의 특정 파일을 저장소의 버전으로 되돌리고 싶었습니다 (로컬 변경 사항은 그대로 유지했습니다. 위의 두 번째 단계를 실행하는 것만으로도 충분했습니다
fkl

예, 두 번째 명령 만 실행하면됩니다. 같은-> shellhacks.com/git-revert-file-to-previous-commit
javaPlease42

22

구조에 git-aliases, awk 및 shell-functions!

git prevision <N> <filename>

여기서 <N>file에 롤백 할 파일의 개정 수입니다 <filename>.
예를 들어, 단일 파일의 바로 이전 개정을 확인하려면 x/y/z.c다음을 실행하십시오.

git prevision -1 x/y/z.c

git prevision은 어떻게 작동합니까?

에 다음을 추가하십시오 gitconfig

[alias]
        prevision = "!f() { git checkout `git log --oneline $2 |  awk -v commit="$1" 'FNR == -commit+1 {print $1}'` $2;} ;f"

기본적으로 명령

  • git log지정된 파일을 수행 하고
  • 파일 히스토리에서 적절한 commit-id를 선택하고
  • git checkout지정된 파일에 대해 commit-id에 a 를 실행 합니다.

기본적 으로이 상황에서 수동으로 수행하는 모든 작업은
아름답고 효율적인 하나의 git-alias에 싸여 있습니다 .git-prevision


20

EasyGit을 여기 에 연결 해야 합니다. 그것이하는 것 중 하나는 더 많은 의미를 부여git revert 하는 것 입니다. 이 경우 간단히 다음과 같이 말할 수 있습니다.

eg revert foo/bar foo/baz


1
이어야합니다 eg revert --in REVISON -- FILENAME. 은 --in중요하다. Windows 사용자의 경우 : git bash를 엽니 다. 실행합니다 echo %PATH. 첫 번째 경로는로 끝나는 사용자 디렉토리에 있어야합니다 bin. 해당 경로를 만듭니다. 저장 예를 들어, 이. 이름을 지정하십시오 eg. 아닙니다 eg.txt.
koppor

20

파일을 이전 커밋으로 되돌리려는 경우 (및 이미 커밋 한 파일을 이미 커밋 한 경우)

git checkout HEAD^1 path/to/file

또는

git checkout HEAD~1 path/to/file

그런 다음 "새"버전을 준비하고 커밋하십시오.

병합의 경우 커밋에 부모가 두 명있을 수 있다는 사실을 알고 HEAD ^ 1은 첫 번째 부모이고 HEAD ~ 1은 두 번째 부모라는 것을 알아야합니다.

트리에 부모가 하나만 있으면 작동합니다.


19

의 제안에 따라 여기에 많은 제안이 있습니다 git checkout $revision -- $file. 몇 가지 모호한 대안 :

git show $revision:$file > $file

또한 특정 버전을 일시적으로 볼 때만 많이 사용합니다.

git show $revision:$file

또는

git show $revision:$file | vim -R -

(OBS : 작업 하기위한 상대 경로 인 경우 $file접두사를 붙여야 합니다)./git show $revision:$file

그리고 더 이상한 :

git archive $revision $file | tar -x0 > $file

1
원하는 커밋 버전을 모르고 작업 디렉토리를 덮어 쓰지 않고 "피킹"해야하는 경우이 방법이 좋습니다.
wisbucky

18

점에 유의 git checkout ./foo하고이 git checkout HEAD ./foo 아닌 정확히 같은 일; 지목 사항:

$ echo A > foo
$ git add foo
$ git commit -m 'A' foo
Created commit a1f085f: A
1 files changed, 1 insertions(+), 0 deletions(-)
create mode 100644 foo
$ echo B >> foo
$ git add foo
$ echo C >> foo
$ cat foo
A
B
C
$ git checkout ./foo
$ cat foo
A
B
$ git checkout HEAD ./foo
$ cat foo
A

(두 번째 add는 파일을 인덱스에 준비하지만 커밋 되지는 않습니다 .)

Git checkout ./foo인덱스./foo 에서 경로 를 되 돌리는 것을 의미 합니다 . 추가하면 Git에 색인의 해당 경로를 수정하기 전에 되돌릴 것을 지시 합니다.HEADHEAD


14

나에게 답장 중 아무것도 분명하게 보이지 않았으므로 매우 쉬운 것처럼 내 것을 추가하고 싶습니다.

커밋이 abc1있고 파일을 여러 번 (또는 한 번 수정) 수행했습니다.file.txt .

이제 파일에서 무언가를 엉망으로 file.txt만들고 이전 커밋으로 돌아가고 싶습니다.abc1 .

1.git checkout file.txt : 필요하지 않은 경우 로컬 변경 사항이 제거됩니다.

2. git checkout abc1 file.txt: 파일을 원하는 버전으로 가져옵니다.

3. git commit -m "Restored file.txt to version abc1": 이것은 당신의 복귀를 저지를 것입니다.

  1. git push : 원격 저장소의 모든 것을 푸시합니다.

물론 2 단계와 3 단계 사이에서 진행 상황 git status을 이해하기 위해 할 수 있습니다 . 일반적으로 file.txt이미 추가 된 것을보아야하므로이 필요하지 않습니다 git add.


2
단계 1과 2는 상호 배타적이라고 생각합니다. abc1이 마지막 커밋이면 2가 필요 없으며 abc1 이후에 다른 커밋이 있으면 직접 2를 수행 할 수 있습니다.
Jean Paul

13
  1. 힘내 파일을 특정 커밋으로 되돌리기
git checkout Last_Stable_commit_Number -- fileName

2.Git 파일을 특정 브랜치로 되돌리기

git checkout branchName_Which_Has_stable_Commit fileName

11

파일의 이전 커밋 버전으로 이동하려면 커밋 번호를 확인하십시오 (예 : eb917a1).

git checkout eb917a1 YourFileName

마지막 커밋 된 버전으로 돌아 가야하는 경우

git reset HEAD YourFileName
git checkout YourFileName

이것은 단순히 파일의 마지막 커밋 상태로 이동합니다


10

git checkout ref | commitHash-파일 경로

예 :

git checkout HEAD~5 -- foo.bar
or 
git checkout 048ee28 -- foo.bar

10

많은 여기에 답 주장 사용 git reset ... <file>또는 git checkout ... <file>그러나 그렇게함으로써 당신의 모든 수정을 잃어 버리게된다<file> 를 사용해서 되돌리려 커밋 이후에 최선을 다하고 있습니다.

하나의 파일에 대한 한 커밋의 변경 사항 git revert을 하나의 파일 (또는 커밋 파일의 하위 집합) git diffgit apply마찬가지로 되돌리려면 두 가지 모두를 사용하는 것이 좋습니다 ( <sha>= 되 돌리겠다고 약속하십시오) :

git diff <sha>^ <sha> path/to/file.ext | git apply -R

기본적으로 되돌리려는 변경 사항에 해당하는 패치를 생성 한 다음 패치를 역적 용하여 변경 사항을 삭제합니다.

물론, 어떤 사이 커밋으로 복귀 라인이 수정 된 경우 일 수 없다 <sha1>HEAD(충돌).


승인 된 답변이어야합니다. 약간 단순화 된 버전을 제안 할 수 있습니다.git show -p <sha> path/to/file.ext|git apply -R
Amaury D

<sha>^!대신 사용할 수 있습니다<sha>^ <sha>
camuncctious

8

사용하다 git log 후 특정 버전 및 사용에 대한 해시 키를 얻기 위해git checkout <hashkey>

참고 : 마지막 해시 앞에 해시를 입력하는 것을 잊지 마십시오. 마지막 해시는 현재 위치 (HEAD)를 가리키고 아무것도 변경하지 않습니다.


7

분명히 누군가가 git에 대한 이해하기 쉬운 책을 작성하거나 git이 설명서에서 더 잘 설명되어야합니다. 나는이 같은 문제에 직면

cd <working copy>
git revert master

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

이안


7

4 단계로 수행 할 수 있습니다.

  1. 구체적으로 되돌리려는 파일로 전체 커밋을 되돌리기-브랜치에서 새 커밋을 만듭니다.
  2. 커밋을 소프트 리셋-커밋을 제거하고 변경 사항을 작업 영역으로 이동
  3. 되돌리고 커밋 할 파일을 수동으로 선택
  4. 작업 영역에 다른 모든 파일을 버리십시오

터미널에 입력해야하는 것 :

  1. git revert <commit_hash>
  2. git reset HEAD~1
  3. git add <file_i_want_to_revert> && git commit -m 'reverting file'
  4. git checkout .

행운을 빕니다


모든 변경 사항을 되 돌리지 않습니까?
arcee123

1
@ arcee123 예. 그러나 후속 재설정은 모든 변경 사항의 되돌리기를 취소합니다. 문제는 git-revert전체 저장소에서만 작동하므로 보상하기 위해 다른 모든 것을 취소해야한다는 것입니다.
Timothy

2
1. 다음을 사용하는 것이 좋습니다. git revert --no-commit <commit_hash>2. git reset HEAD추가 커밋을 저장하고 작업 디렉토리에서만 모든 변경 사항을 수행합니다.
Timothy

@ greg-hewgill의 답변이 더 우수합니다. 이것은 거칠고 사용해서는 안됩니다.
Daniel Tranca

이것이 바로 특정 파일을 실제로 되 돌리는 데 필요한 것입니다. 이미 원격 저장소로 푸시 된 이전 커밋에서 몇 개의 파일에 대한 변경 사항을 취소해야했습니다. 결과를 되돌리고 재설정하고 커밋했습니다 git revert _oldcommit_ --no-commit git reset -- _unchanged1_ _unchanged2_ ... git commit -m "branch without changes to specific files". 새 분기 팁은 되 돌린 파일을 제외한 모든 변경 사항을 반영했습니다.
Suncat2000

7

이것은 매우 간단한 단계입니다. 우리가 원하는 커밋 ID에 대한 체크 아웃 파일.

# git checkout <previous commit_id> <file_name>
# git commit --amend

이것은 매우 편리합니다. 커밋 상단의 이전 커밋 ID로 파일을 가져 오려면 쉽게 할 수 있습니다.


5
git revert <hash>

주어진 커밋을 되돌립니다. git revert가장 최근의 커밋에만 영향을 미친 다고 생각되는 것 같습니다 .

특정 파일의 변경 사항을 되돌리고 해당 커밋이 해당 파일보다 더 많이 변경된 경우에는 문제가 해결되지 않습니다.


5

마지막 커밋에서 잘못된 파일을 커밋하면 다음 지침을 따르십시오.

  1. 오픈 소스 트리,이 커밋으로 변경

오픈 소스 트리

  1. 행을 변경하고 잘못된 파일이 커밋으로 전송 된 커밋을 찾으십시오.

여기에 이미지 설명을 입력하십시오

  1. 해당 커밋에서 변경 사항 목록을 볼 수 있습니다 소스 트리의 파일 목록
  2. 그것을 선택한 다음 ... 버튼을 클릭하십시오. 오른쪽 ... 역 파일을 클릭하십시오.
  3. 왼쪽 하단의 파일 상태 탭에서 확인한 다음 스테이지 해제를 클릭하십시오.

파일 상태 탭

  1. 제거 된 파일을 커밋하여 Visual Studio 코드를 열고 되 돌리십시오.
  2. 그 후에는 소스 트리에서 마지막 커밋에서 결과를 볼 수 있습니다

여기에 이미지 설명을 입력하십시오

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.