etc./StackOverFlow

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

청렴결백한 만능 재주꾼 2021. 9. 28. 00:13
반응형

질문자 :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 foogit 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


  1. Git 파일을 특정 커밋으로 되돌리기
 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

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
  • 파일 기록에서 적절한 커밋 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 ./foogit 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" : 되돌리기를 커밋합니다.

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

물론 2단계와 3단계 사이에 git status 를 수행하여 진행 상황을 이해할 수 있습니다. 일반적으로 file.txt 이미 추가된 것을 볼 수 있으며 이것이 git add 가 필요하지 않은 이유입니다.



답변자 : Vince


여기에서 많은 답변이 git reset ... <file> 또는 git checkout ... <file> 을 사용한다고 주장하지만 그렇게 하면 되돌리려는 커밋 후에 커밋 <file> 에 대한 모든 수정 사항을 잃게 됩니다.

git revert 가 하나의 파일(또는 커밋 파일의 하위 집합)에 대해서만 수행하는 것처럼 단일 파일에서만 한 커밋의 변경 사항을 되돌리려 git diffgit 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단계로 수행할 수 있습니다.

  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 .

행운을 빕니다



답변자 : Otto


git revert <hash>

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

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



답변자 : saber tabatabaee yazdi


마지막 커밋에서 잘못된 파일을 커밋한 경우 다음 지침을 따르세요.

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

오픈 소스 트리

  1. 행을 변경하고 잘못된 파일이 커밋으로 전송된 커밋을 찾습니다.

여기에 이미지 설명 입력

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

파일 상태 탭

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

여기에 이미지 설명 입력



출처 : Here


출처 : http:www.stackoverflow.com/questions/215718/how-can-i-reset-or-revert-a-file-to-a-specific-revision">

반응형