그냥 코멘트 :
git revert aCommit
는 ("모든 파일 커밋의 부분"에서 같이) 모든 커밋 되돌릴 않습니다,
이 역방향 패치를 계산은 머리에 적용 그리고 커밋.
그래서 두 가지 문제가 여기 (첫 번째는 쉽게 해결된다) :
는
- 당신이
-no-commit
옵션을 추가 할 수 있도록 항상 커밋 않습니다 "git revert --no-commit aCommit
을"이상을 되 돌리는 경우에 유용합니다 하나의 커밋이 인덱스에 연속적으로 적용됩니다.
- 특정 파일에 적용되지 않습니다 (되돌릴 수없는 1000 개의 변경 사항이있는 커밋의 일부인 경우)? 그들은 다른 커밋, 당신은 (즉, 당신은하지만이 경우에는 꼭 필요한 것이 아니다), 특히
git checkout <commit> <filename>
구문을 git-checkout
을 볼 수 있었다 당신이 특정 파일을 추출 할 경우이 들어
,
Easy Git (Elijah Newren)은 Git Mailing list에 "완전한 복귀"를 시도했습니다. 그러나 많은 성공을 거두지 못합니다.
사람들은 종종 "변경 사항 되돌리기"를 원합니다.이제
이있을 수 있습니다 : 마지막 커밋 이후 모든 변경 될 수
(32) 사이
- 변화와 전 29 개 개정,
- 는 변경 될 수 있습니다 3 주 전에 커밋 이후 , 또는
- 하나의 특정 커밋 일 수 있습니다. 사용자가 단지 특정 파일에 등이 복귀 부분 집합 할 수 있습니다
- ,
(eg revert
는 documented here이지만, 나는 그것이 예를 들어 현재 배포판의 일부 생각입니다 확실하지 않다)
하지만 모두 "되돌리기 변경 사항"으로 끝납니다.
eg revert --since HEAD~3 # Undo all changes since HEAD~3
eg revert --in HEAD~8 # much like git revert HEAD~8, but nocommit by default
eg revert --since HEAD foo.py # Undo changes to foo.py since last commit
eg revert foo.py # Same as above
eg revert --in trial~7 bar.c baz. # Undo changes made in trial~7 to bar.[ch]
이러한 종류의 서로 다른 명령이있을 필요해야 "데이터를 되 돌리는"정말 그렇게 다른, 또는 이러한 작업의 일부는 간단한 되돌리기 명령에 의해 지원되지 않을 것을?
대부분의 사용자는 대부분 "eg revert FILE1 FILE2...
" 양식을 사용하지만 추가 기능 지원에는 별다른 영향을주지 않습니다.
또한 핵심 git이 이러한 동작을 채택하지 못하도록하는 근본적인 것이 있습니까?
엘리야
참고 : 일반화 된 revert
명령에 대한 이해가되지 않는 기본적으로 커밋하고, "git revert REVISION
는"합니다 (이대로 더 플래그를 추가하도록 사용자에게 알려주) 지침과 함께 밖으로 오류 것이다.
당신이 가지고 최선을 다하고 50에서 20 개 파일이 오래된 X가 자리를 차지하지 말았어야 변화를 도입 커밋 실현 말할 수 있습니다.
작은 배관이 순서에 있습니다.
는 당신이 필요하면 되돌릴 에 필요한 모든 특정 파일을 나열하는 방법입니다
각각에 대해, 다음,
및 ( "이후의 모든 변경 내용을 유지하면서 X 커밋의 변경을 취소하려면"같이)
다음은 계속 유지하고자하는 모든 후속 변경 사항을 삭제하지 않고 손실 된 기능을 복구하는 것입니다.
그 기술은 언젠가는 "부정적인 합병"이라고 불립니다.
git merge-file <current-file> <base-file> <other-file>
means이후 :
이 <current-file>
에 <base-file>
<other-file>
까지 이어질 모든 변경 사항을 통합, 당신은 모든 변경 사항을 적용 할 말함으로써 삭제 기능을 복원 할 수 있습니다)
.
- from : X (함수가 삭제 된 곳)
- to : X^(이전 커밋 먼저 현재 파일에 아무것도하지 않고 변경 사항을 검토 할 수 있습니다 '
-p
' 인수 : 함수가 아직 거기 X)
주 전에. 확실하면 해당 옵션을 제거하십시오.
주 다음 git merge-file
가 not that simple입니다 : 당신은 같은 파일의 이전 버전을 참조 할 수 없습니다.
(당신은 이상 가지고 것이다 좌절 메시지를 통해 : error: Could not stat X
)
당신이에 :
git cat-file blob a.py > tmp/ori # current file before any modification
git cat-file blob HEAD~2:a.py > tmp/X # file with the function deleted
git cat-file blob HEAD~3:a.py > tmp/F # file with the function which was still there
git merge-file a.py tmp/X tmp/F # basically a RCS-style merge
# note the inversed commit order: X as based, then F
# that is why is is a "negative merge"
diff -u a.py tmp/ori # eyeball the merge result
git add a.py
git commit -m "function restored" # and any other changes made from X are preserved!
이 이전 커밋 ... 일부 내에서 많은 수의 파일에 대해 수행 할 경우
오이, "실현 된", "실현되지 않은"! (저는 미국인이 아닙니다 ..) – dbr
야드와 발을 사용하여 측정하는 사람들이 철자를 수정했습니다 ... 하하 – FaddishWorm