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
'Programing' 카테고리의 다른 글
"경고 CS4014 :이 호출을 기다리지 않기 때문에 현재 메소드의 실행이 계속됩니다 ..."억제 (0) | 2020.06.21 |
---|---|
네임 스페이스가 인식되지 않습니다 (있는 경우에도) (0) | 2020.06.21 |
어떤 깊이에서든 이름으로 요소에 대한 XDocument 쿼리 (0) | 2020.06.21 |
사이트 코더 바이트에서 'gets (stdin)'은 어떻게됩니까? (0) | 2020.06.21 |
PHP에서 배열의 시작 부분에 항목을 삽입하는 방법은 무엇입니까? (0) | 2020.06.21 |