bestsource

단일 파일을 이전 버전으로 되돌리려면 어떻게 해야 합니까?

bestsource 2023. 4. 19. 23:19
반응형

단일 파일을 이전 버전으로 되돌리려면 어떻게 해야 합니까?

파일에서 다른 커밋을 수행할 수 있는 방법이 있습니까?예를 들어, 파일을 5번 수정했는데 이미 확약하고 저장소에 푸시한 후 2번 변경으로 돌아갑니다.

제가 알기론 지점을 많이 두는 방법밖에 없는 것 같은데, 맞나요?내 말이 맞다면 며칠 안에 수백 개의 지점이 생기게 될 거야, 그래서 아마 잘 이해가 안 가는 것 같아.

누가 좀 정리해 주시겠어요?

우선 우리가 하고 싶은 일에 대한 질적인 설명부터 시작합시다(이것의 대부분은 Ben Straub의 답변에 있습니다).몇 개의 커밋을 실시했습니다만, 그 중 5개는 특정의 파일을 변경해, 그 파일을 이전 버전 중 하나로 되돌리고 싶다고 생각하고 있습니다.우선, git는 개별 파일의 버전 번호를 유지하지 않습니다.컨텐츠만 추적합니다.커밋은 기본적으로 일부 메타데이터(커밋 메시지 등)와 함께 작업 트리의 스냅샷입니다.따라서 어떤 커밋이 원하는 파일의 버전을 가지고 있는지 알아야 합니다.그 사실을 알게 되면 파일을 그 상태로 되돌리는 새로운 커밋을 해야 합니다.(우리는 이미 이 콘텐츠를 밀어붙였고, 역사를 편집하는 것은 다른 모든 사람들에게 혼란을 주기 때문에 단순히 역사를 가지고 놀 수는 없습니다.)

우선, 적절한 커밋을 찾아냅니다.지정된 파일을 수정한 커밋을 쉽게 볼 수 있습니다.

git log path/to/file

커밋 메시지가 충분하지 않고 각 커밋의 파일에 대해 수행된 작업을 확인해야 할 경우-p/--patch옵션:

git log -p path/to/file

또는 gitk의 그래픽 보기를 선호한다면

gitk path/to/file

뷰 메뉴를 통해 gitk를 시작하면 이 작업을 수행할 수도 있습니다. 뷰 옵션 중 하나는 포함할 경로 목록입니다.

어느 쪽이든 원하는 파일 버전과 함께 커밋의 SHA1(해시)을 찾을 수 있습니다.이제 이렇게만 하면 됩니다.

# get the version of the file from the given commit
git checkout <commit> path/to/file
# and commit this modification
git commit

(체크아웃명령어는 먼저 파일을 인덱스로 읽은 후 워크트리로 복사하므로 사용할 필요가 없습니다.git add커밋할 준비를 위해 인덱스에 추가합니다.)

파일에 간단한 이력(이름 변경이나 복사 등)이 없는 경우는, VonC 의 뛰어난 코멘트를 참조해 주세요. git속도를 희생하면서 그런 것들을 더 주의 깊게 찾도록 지시할 수 있습니다.역사가 단순하다고 확신한다면 신경 쓰지 않아도 된다.

Git은 매우 유연합니다.당신이 원하는 것을 하기 위해 수백 개의 지점이 필요하지 않습니다.상태를 다시 두 번째 변경으로 되돌리려면(실제로 이미 커밋되어 푸시된 변경입니다), 다음과 같이 하십시오.

git revert a4r9593432 

여기서 a4r9593432는 취소할 커밋 해시의 시작 문자입니다.

커밋에 많은 파일에 대한 변경이 포함되어 있지만 파일 중 하나만 되돌리려면 (2번째 또는 3번째 양식)을 사용할 수 있습니다.

git reset a4r9593432 -- path/to/file.txt
# the reverted state is added to the staging area, ready for commit
git diff --cached path/to/file.txt        # view the changes
git commit
git checkout HEAD path/to/file.txt        # make the working tree match HEAD           

git reset하다git checkout <hash> <file path>★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★

커밋 x 의 파일을 표시하는 것만으로, 다음과 같이 할 수 있습니다.

git show a4r9593432:path/to/file.txt

커밋 해시를 통하지 않고 커밋을 참조하는 방법은 여러 가지가 있습니다(Git 사용자 매뉴얼의 "커밋 명명" 참조).

Git은 파일 버전에 대해 생각하지 않는다.git의 버전은 전체 트리의 스냅샷입니다.

따라서, 당신이 원하는 것은 대부분의 파일의 최신 내용을 가지고 있지만, 1개의 파일의 내용은 5개의 커밋 전과 같은 트리입니다.이것은 오래된 커밋 위에 새로운 커밋의 형태를 취합니다.트리의 최신 버전에는 원하는 것이 포함됩니다.

전의 있을 입니다: ★★★★★★★★★★★★★★★★★★★★★★★★★★★1★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★master~5을 다른 하여 체크 아웃 , , ,른른른른 , , , , , , , , , , , , , , , , , , , , 。master이치노

원하는 변경을 원래대로 되돌리는 diff를 선택하여 커밋할 수 있습니다.

내의 대로 되돌리는 : " " " " " "from..to 과 같이 .

git diff to..from > foo.diff  # get a reverse diff
patch < foo.diff
git commit -a -m "Undid changes from..to".

여기서 발췌 : http://git.661346.n2.nabble.com/Revert-a-single-commit-in-a-single-file-td6064050.html

 git revert <commit> 
 git reset 
 git add <path> 
 git commit ... 
 git reset --hard # making sure you didn't have uncommited changes earlier 

그것은 나에게 아주 잘 작동했다.

언급URL : https://stackoverflow.com/questions/2733873/how-can-i-revert-a-single-file-to-a-previous-version

반응형