파일 그룹의 일부로 몇 번 커밋된 파일을 일부 변경했지만 이제 변경 사항을 이전 버전으로 재설정/되돌리고 싶습니다.
git diff
와 함께 git log
를 수행했지만 파일을 과거의 이전 상태로 되돌리는 방법을 모릅니다.
질문자 :Hates_
파일 그룹의 일부로 몇 번 커밋된 파일을 일부 변경했지만 이제 변경 사항을 이전 버전으로 재설정/되돌리고 싶습니다.
git diff
와 함께 git log
를 수행했지만 파일을 과거의 이전 상태로 되돌리는 방법을 모릅니다.
답변자 : Greg Hewgill
원하는 커밋의 해시가 c5f567
이라고 가정합니다.
git checkout c5f567 -- file1/to/restore file2/to/restore
git checkout 매뉴얼 페이지에서 더 많은 정보를 얻을 수 있습니다.
c5f567
이전 커밋으로 되돌리려면 ~1
추가하십시오(여기서 1은 되돌리려는 커밋 수이며 아무 것도 될 수 있음).
git checkout c5f567~1 -- file1/to/restore file2/to/restore
참고로 저는 이 명령이 평범한 것(가지 사이에서 변경)과 비정상적이고 파괴적인 것(작업 디렉토리에서 변경을 버리기) 모두에 사용되기 때문에 항상 불편했습니다.
수정된 작업 복사본 파일을 복원하기 위해 특별히 설계된 git restore
명령도 있습니다. git이 충분히 새롭다면 이 명령을 사용할 수 있지만 설명서에는 경고가 함께 제공됩니다.
이 명령은 실험적입니다. 동작이 변경될 수 있습니다.
답변자 : Chris Lloyd
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>
답변자 : foxxtrot
가장 편리한 경우 SHA-1을 포함하여 git 커밋에 대한 참조를 사용할 수 있습니다. 요점은 명령이 다음과 같다는 것입니다.
git checkout [commit-ref] -- [filename]
답변자 : Greg Hewgill
git checkout -- foo
foo
가 HEAD로 재설정됩니다. 당신은 또한 수:
git checkout HEAD^ foo
하나의 개정판 등을 위해
답변자 : CDR
그리고 가장 자주 필요한 마지막 커밋 버전으로 되돌리려면 이 간단한 명령을 사용할 수 있습니다.
git checkout HEAD file/to/restore
답변자 : bbrown
나는 지금 같은 문제가 있었고이 답변을 가장 이해하기 쉽다는 commit-ref
는 돌아가고 싶은 로그의 변경 SHA 값입니다).
git checkout [commit-ref] [filename]
이렇게 하면 작업 디렉토리에 이전 버전이 저장되고 원하는 경우 거기에서 커밋할 수 있습니다.
답변자 : Ron DeVera
돌아가야 하는 커밋 수를 알고 있다면 다음을 사용할 수 있습니다.
git checkout master~5 image.png
이것은 당신이 master
브랜치에 있고 원하는 버전이 5 커밋 백이라고 가정합니다.
답변자 : jdee
나는 그것을 발견했다고 생각합니다 .... http://www-cs-students.stanford.edu/~blynn/gitmagic/ch02.html에서
가끔은 과거로 돌아가서 모든 변경 사항이 잘못되었기 때문에 특정 시점 이후의 모든 변경 사항을 잊고 싶을 때가 있습니다.
시작:
$ git log
최근 커밋 목록과 SHA1 해시를 보여줍니다.
다음을 입력합니다.
$ git reset --hard SHA1_HASH
주어진 커밋으로 상태를 복원하고 레코드에서 모든 최신 커밋을 영구적으로 지웁니다.
답변자 : v2k
이것은 나를 위해 일했습니다.
git checkout <commit hash> file
그런 다음 변경 사항을 커밋합니다.
git commit -a
답변자 : mjarosie
git v2.23.0 현재 git checkout
이 담당했던 부분을 가정 하는 새로운 git 복원 방법이 있습니다(허용되는 답변에서도 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
답변자 : gitster
"롤백"이라고 말할 때 주의해야 합니다. $A 커밋에 파일의 한 버전이 있었고 나중에 $B와 $C 두 커밋에서 두 가지 변경을 수행했다면(따라서 보고 있는 것은 파일의 세 번째 반복임) " 처음으로 롤백하고 싶어요", 정말 그런가요?
두 번째와 세 번째 반복 모두에서 변경 사항을 제거하려면 매우 간단합니다.
$ git checkout $A file
그런 다음 결과를 커밋합니다. 명령은 "$A 커밋에 의해 기록된 상태에서 파일을 체크아웃하고 싶습니다"라고 묻습니다.
다른 한편으로, 당신이 의미한 것은 커밋 $C가 파일에 한 것을 유지하면서 두 번째 반복(즉, 커밋 $B)이 가져온 변경 사항을 제거하고 $B를 되돌리고 싶을 것입니다.
$ git revert $B
$B 커밋을 만든 사람은 엄격하지 않을 수 있으며 동일한 커밋에서 완전히 관련 없는 변경을 커밋했을 수 있으며 이 되돌리기는 잘못된 변경 사항이 보이는 파일 이외의 파일을 건드릴 수 있으므로 수행한 후 결과를 주의 깊게 확인하는 것이 좋습니다. 그래서.
답변자 : Aaron Maenpaa
흥미롭게도 foo
라는 디렉토리에 있으면 git checkout 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
답변자 : cmcginty
rebase
작동하는 방식은 다음과 같습니다.
git checkout <my branch> git rebase master git checkout master git merge <my branch>
가지고 있다고 가정
---o----o----o----o master \---A----B <my branch>
처음 두 명령 ... commit 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>
답변자 : ireshika piyumalie
git checkout Last_Stable_commit_Number -- fileName
2.Git 파일을 특정 분기로 되돌리기
git checkout branchName_Which_Has_stable_Commit fileName
답변자 : Gulshan Maurya
대상 파일의 첫 번째 재설정 헤드
git reset HEAD path_to_file
두 번째 체크아웃 해당 파일
git checkout -- path_to_file
답변자 : ModernIncantations
파일을 이전 커밋으로 되돌리려는 경우(및 이미 커밋된 파일을 되돌리려는 경우) 다음을 사용할 수 있습니다.
git checkout HEAD^1 path/to/file
또는
git checkout HEAD~1 path/to/file
그런 다음 "새" 버전을 준비하고 커밋합니다.
병합의 경우 커밋에 두 개의 부모가 있을 수 있다는 지식으로 무장하면 HEAD^1이 첫 번째 부모이고 HEAD~1이 두 번째 부모라는 것을 알아야 합니다.
트리에 부모가 하나만 있는 경우 둘 중 하나가 작동합니다.
답변자 : TheCodeArtist
git-aliases, awk 및 shell-functions를 구출하십시오!
git prevision <N> <filename>
여기서 <N>
<filename>
파일에 대해 롤백할 파일의 수정 버전 수입니다.
x/y/zc
의 직전 개정판을 체크아웃하려면 다음을 실행하십시오.
git prevision -1 x/y/zc
gitconfig
다음을 추가하십시오.
[alias] prevision = "!f() { git checkout `git log --oneline $2 | awk -v commit="$1" 'FNR == -commit+1 {print $1}'` $2;} ;f"
명령은 기본적으로
- 지정된 파일에 대해
git log
- 파일 기록에서 적절한 커밋 ID를 선택하고
- 지정된 파일의 커밋 ID에 대해
git checkout
을 실행합니다.
기본적으로 이 상황에서 수동으로 하는 모든 작업은
하나의 아름답고 효율적인 git-alias로 포장 - git-prevision
답변자 : Peter V. Mørch
여기에 많은 제안이 있으며 대부분 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
답변자 : Aristotle Pagaltzis
여기에 EasyGit 을 연결해야 합니다. 이 래퍼는 노련한 사용자를 혼란스럽게 하지 않고 git이 초보자에게 더 쉽게 접근할 수 있도록 하는 래퍼입니다. 그것이 하는 일 중 하나는 git revert
더 많은 의미를 부여 하는 것입니다. 이 경우 간단히 다음과 같이 말할 수 있습니다.
eg revert foo/bar foo/baz
답변자 : Damien Diederen
그러나 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
를 되돌리는 것을 의미합니다. HEAD
추가하면 Git이 인덱스의 해당 경로를 HEAD
개정판으로 되돌리도록 지시합니다.
답변자 : desmond13
나에게 대답은 정말 명확하지 않았으므로 매우 쉽게 보이는 답장을 추가하고 싶습니다.
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"
: 되돌리기를 커밋합니다.
git push
: 이것은 원격 저장소의 모든 것을 푸시합니다. 물론 2단계와 3단계 사이에 git status
를 수행하여 진행 상황을 이해할 수 있습니다. 일반적으로 file.txt
이미 추가된 것을 볼 수 있으며 이것이 git add
가 필요하지 않은 이유입니다.
답변자 : Vince
여기에서 많은 답변이 git reset ... <file>
또는 git checkout ... <file>
을 사용한다고 주장하지만 그렇게 하면 되돌리려는 커밋 후에 커밋 <file>
에 대한 모든 수정 사항을 잃게 됩니다.
git revert
가 하나의 파일(또는 커밋 파일의 하위 집합)에 대해서만 수행하는 것처럼 단일 파일에서만 한 커밋의 변경 사항을 되돌리려 git diff
와 git apply
with <sha>
= 되돌리려는 커밋의 해시):
git diff <sha>^ <sha> path/to/file.ext | git apply -R
기본적으로 되돌리려는 변경 사항에 해당하는 패치를 먼저 생성한 다음 패치를 역 적용하여 해당 변경 사항을 삭제합니다.
<sha1>
과 HEAD
(충돌) 사이의 커밋에 의해 수정된 경우에는 작동하지 않습니다.
답변자 : shah1988
파일의 이전 커밋 버전으로 이동하려면 커밋 번호(예: eb917a1)를 가져온 다음
git checkout eb917a1 YourFileName
마지막으로 커밋된 버전으로 돌아가야 하는 경우
git reset HEAD YourFileName git checkout YourFileName
이것은 단순히 파일의 마지막 커밋 상태로 이동합니다.
답변자 : Abhishek Dwivedi
이것은 매우 간단한 단계입니다. 파일을 우리가 원하는 커밋 ID로 체크아웃합니다. 여기에는 이전에 하나의 커밋 ID가 있습니다. 그런 다음 git commit amend만 하면 끝입니다.
# git checkout <previous commit_id> <file_name> # git commit --amend
이것은 매우 편리합니다. 커밋 맨 위에 있는 이전 커밋 ID로 파일을 가져오고 싶다면 쉽게 할 수 있습니다.
답변자 : Amos Folarin
git checkout ref|commitHash -- 파일 경로
예
git checkout HEAD~5 -- foo.bar or git checkout 048ee28 -- foo.bar
답변자 : mustafakyr
git log
를 사용하여 특정 버전의 해시 키를 얻은 다음 git checkout <hashkey>
참고: 마지막 해시 앞에 해시를 입력하는 것을 잊지 마십시오. 마지막 해시는 현재 위치(HEAD)를 가리키며 아무 것도 변경하지 않습니다.
답변자 : Ian Davis
분명히 누군가는 git에 대해 이해할 수 있는 책을 작성해야 하거나 git이 문서에서 더 잘 설명되어야 합니다. 이 같은 문제에 직면하여 나는 그것을 추측했다.
cd <working copy> git revert master
할 것으로 보이는 마지막 커밋을 취소합니다.
이안
답변자 : Nir M.
4단계로 수행할 수 있습니다.
터미널에 입력해야 할 사항:
git revert <commit_hash>
git reset HEAD~1
git add <file_i_want_to_revert>
&& git commit -m 'reverting file'
git checkout .
행운을 빕니다
답변자 : Otto
git revert <hash>
주어진 커밋을 되돌립니다. git revert
가 가장 최근 커밋에만 영향을 미친다고 생각하는 것 같습니다.
특정 파일의 변경 사항을 되돌리고 해당 커밋이 해당 파일보다 많이 변경된 경우 문제가 해결되지 않습니다.
답변자 : saber tabatabaee yazdi
마지막 커밋에서 잘못된 파일을 커밋한 경우 다음 지침을 따르세요.
출처 : Here
출처 : http:www.stackoverflow.com/questions/215718/how-can-i-reset-or-revert-a-file-to-a-specific-revision">
JavaScript에서 문자열의 모든 항목을 바꾸는 방법 (0) | 2021.09.30 |
---|---|
JavaScript의 배열에 대한 For-each (0) | 2021.09.30 |
Java에서 InputStream을 어떻게 읽거나 문자열로 변환합니까? (0) | 2021.09.28 |
참조 — PHP에서 이 기호는 무엇을 의미합니까? (0) | 2021.09.28 |
"INNER JOIN"과 "OUTER JOIN"의 차이점은 무엇입니까? (0) | 2021.09.28 |