Programing

GIT에서 부분 복귀를 할 수 있습니까

lottogame 2020. 6. 21. 19:38
반응형

GIT에서 부분 복귀를 할 수 있습니까


다중 파일 커밋에서 단일 파일 또는 파일의 특정 변경 사항 만 되돌릴 수 있습니까?

전체 이야기 나는 많은 파일을 커밋했습니다. 나중에 이름이없는 (JACK !!!) 누군가가 커밋을하면 파일을 자신의 저장소에 복사하고 여러 파일을 커밋하여 내가 한 일부 변경 사항을 덮어 썼습니다. 클로버 또는 더 나은 파일 하나를 되돌리려면 해당 파일에서 두 가지 변경 사항을 되 돌리십시오. 이것은 끌어 당기고 나서 별도의 되돌리기 커밋이어야합니다.


'--commit'옵션을 추가하여 새로운 커밋을 만들지 않고 커밋을 되돌릴 수 있습니다. 이렇게하면 되 돌린 모든 파일이 준비 영역에 남습니다. 거기에서 소프트 리셋을 수행하고 실제로 원하는 변경 사항을 추가합니다. 예제 워크 플로 :

git revert <sha-of-bad-commit> --no-commit
git reset   // This gets them out of the staging area
<edit bad file to look like it should, if necessary>
git add <bad-file>
git checkout . // This wipes all the undesired reverts still hanging around in the working copy
git commit

checkout명령을 사용하여 이전 버전의 파일을 대화식으로 적용 할 수 있습니다 .

예를 들어, COMMIT다시 추가 할 코드가 제거 된 위치 를 알고 있으면 다음 명령을 실행할 수 있습니다.

git checkout -p COMMIT^ -- FILE_TO_REVERT

Git은 파일의 현재 버전에서 누락 된 덩어리를 다시 추가하라는 메시지를 표시합니다. e다시 적용하기 전에 변경 패치를 작성하는 데 사용할 수 있습니다 .


를 사용하여 되돌리려는 파일의 오래되고 좋은 내용을 수동으로 확인할 수 있습니다 git checkout. 예를 들어 my-important-file버전에 있던 버전 으로 되돌리려 abc123면 다음을 수행하십시오.

git checkout abc123 -- my-important-file

이제 당신은 오래된 내용을 가지고 있으며 my-important-file, 기분이 좋으면 편집하고 평소와 같이 커밋하여 변경 사항을 되돌릴 수 있습니다. 커밋의 일부만 되돌리려면 git add -p커밋 할 패치에서 몇 개의 덩어리 만 선택하십시오.


Git 메일 링리스트에서이를 수행하는 방법을 찾았습니다.

git show <commit> -- <path> | git apply --reverse

출처 : http://git.661346.n2.nabble.com/Revert-a-single-commit-in-a-single-file-td6064050.html#a6064406

변형

패치가 제대로 적용되지 않으면 명령이 실패하지만 (변경 사항이 발생하지 않음) --3way대신 충돌이 발생하여 수동으로 해결할 수 있습니다 (이 경우 Casey의 답변 이 더 실용적 일 수 있음).

git show <commit> -- <path> | git apply --reverse --3way

이것을 사용하여 여러 커밋을 부분적으로 되돌릴 수 있습니다.

git log -S<string> --patch | git apply --reverse

<string>커밋에서 변경 사항이 일치하는 파일을 되돌 립니다. 이것은 내 유스 케이스에 필요한 것입니다 (몇 가지 별도 커밋은 다른 파일과 비슷한 변경 사항을 가져 왔으며 다른 파일은 되돌리고 싶지 않은 관련없는 방식으로 변경했습니다).

diff.noprefix=true설정 ~/.gitconfig-p0경우 git apply명령 에 추가 해야합니다 . 예 :

git show <commit> -- <path> | git apply -p0 --reverse

참고 URL : https://stackoverflow.com/questions/5669358/can-i-do-a-partial-revert-in-git

반응형