programing

GIT에서 부분 되돌리기를 수행할 수 있습니까?

subpage 2023. 6. 28. 21:44
반응형

GIT에서 부분 되돌리기를 수행할 수 있습니까?

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

전체 이야기 저는 많은 파일들을 범했습니다.나중에 이름을 밝히지 않은 누군가(JACK!!!)가 자신의 저장소에 파일을 복사하고 여러 파일을 커밋하여 일부 변경 사항을 덮어씁니다.저는 클리버된 파일이나 더 나은 파일을 되돌리고 싶습니다. 들어가서 그 파일의 두 가지 변경 사항을 되돌리고 싶습니다.끌어다 놓았기 때문에 이는 별도의 되돌리기 커밋이어야 합니다.

다음을 추가하여 새 커밋을 생성하지 않고 커밋을 되돌릴 수 있습니다.--no-commit선택.이렇게 하면 모든 되돌린 파일이 준비 영역에 남게 됩니다.

여기서 혼합 재설정(기본 재설정)을 수행하여 파일의 스테이징을 해제하고 원하는 변경사항을 추가합니다.그런 다음 커밋하고(여러 개의 커밋을 원하는 경우 더 많은 파일을 추가하고 커밋할 수 있음), 마지막으로 현재 디렉토리를 체크아웃하여 다음으로 발생하는 커밋되지 않은 수정사항과 준비되지 않은 수정사항을 모두 지웁니다.revert워크플로우의 예:

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 commit
git checkout . # This wipes all the undesired reverts still hanging around in the working copy

다음을 사용하여 이전 버전의 파일을 대화형으로 적용할 수 있습니다.checkout지휘권

예를 들어, 만약 당신이 알고 있다면.COMMIT다시 추가할 코드가 제거된 곳에서 다음 명령을 실행할 수 있습니다.

git checkout -p COMMIT^ -- FILE_TO_REVERT

Git는 현재 버전의 파일에서 누락된 Hunk를 다시 추가하라는 메시지를 표시합니다.사용할 수 있습니다.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

반응형