깃이 있는 커밋의 일부 되돌리기
특정 커밋을 되돌리고 싶습니다.안타깝게도 우리 조직은 여전히 CVS를 표준으로 사용하기 때문에 CVS에 다시 커밋하면 여러 Git 커밋이 하나로 통합됩니다.이 경우 저는 원래의 git commit을 선택하고 싶지만, 그것은 불가능합니다.
다음과 유사한 접근 방식이 있습니까?git add --patch
그것은 내가 전환할 커밋의 어떤 부분을 결정하기 위해 diff를 선택적으로 편집할 수 있게 해줄 것입니까?
사용--no-commit
(-n
) 옵션git revert
그런 다음 변경 사항을 단계적으로 해제한 다음 사용합니다.git add --patch
:
$ git revert -n $bad_commit # Revert the commit, but don't commit the changes
$ git reset HEAD . # Unstage the changes
$ git add --patch . # Add whatever changes you want
$ git commit # Commit those changes
참고: git add --patch를 사용하여 추가하는 파일은 유지하려는 파일이 아니라 되돌리려는 파일입니다.
저는 다음을 성공적으로 사용했습니다.
먼저 전체 커밋을 되돌리지만 커밋하지는 않습니다.
git revert -n <sha1> # -n is short for --no-commit
그런 다음 되돌린 GOOD 변경 사항을 인덱스에서 대화형으로 제거합니다.
git reset -p # -p is short for --patch
그런 다음 잘못된 변경 사항의 역방향 차이를 커밋합니다.
git commit -m "Partially revert <sha1>..."
마지막으로 되돌린 GOOD 변경 사항(리셋 명령에 의해 스테이징되지 않음)은 여전히 작업 트리에 있습니다.그들은 청소가 필요합니다.작업 트리에 커밋되지 않은 다른 변경 사항이 남아 있지 않은 경우 다음 작업을 수행할 수 있습니다.
git reset --hard
솔루션:
git revert --no-commit <commit hash>
git reset -p # every time choose 'y' if you want keep the change, otherwise choose 'n'
git commit -m "Revert ..."
git checkout -- . # Don't forget to use it.
개인적으로, 저는 자동 생성된 커밋 메시지를 재사용하고 사용자에게 최종 커밋하기 전에 "부분적으로"라는 단어를 편집하고 삽입할 수 있는 기회를 주는 이 버전을 선호합니다.
# generate a revert commit
# note the hash printed to console on success
git revert --no-edit <hash to revert>
# undo that commit, but not its changes to the working tree
# (reset index to commit-before-last; that is, one graph entry up from HEAD)
git reset HEAD~1
# interactively add reversions
git add -p
# commit with pre-filled message
git commit -c <hash from revert commit, printed to console after first command>
# reset the rest of the current directory's working tree to match git
# this will reapply the excluded parts of the reversion to the working tree
# you may need to change the paths to be checked out
# be careful not to accidentally overwrite unsaved work
git checkout -- .
다른 대안(파일의 현재 버전이 되돌리려는 버전과 너무 멀지 않은 경우)은 다음과 같습니다.checkout
대화식으로보다git log
실행 취소하려는 커밋의 해시 또는 커밋 직전의 해시를 가져옵니다.명령은 다음 중 하나가 됩니다.
git checkout --patch HASH_OF_COMMIT_TO_REVERT^ -- file/you/want/to/fix.ext
(어디서^
의 상위 커밋) 또는 다음을 의미합니다.
git checkout --patch HASH_PRECEDING_COMMIT_TO_REVERT -- file/you/want/to/fix.ext
그런 다음 반환할 헝크 또는 그 부분을 선택하여 선택할 수 있습니다.s
(vmx) 패치 적용 시 옵션입니다.
이렇게 하면 작업 트리의 파일이 변경되지만 커밋은 생성되지 않으므로, 정말로 가득 찬 경우에는 다시 시작할 수 있습니다.git reset --hard -- file/you/want/to/fix.ext
.
git-revert -n을 사용한 다음 add --patch를 사용하여 hunk를 선택할 수 있습니다.
언급URL : https://stackoverflow.com/questions/4795600/reverting-part-of-a-commit-with-git
'programing' 카테고리의 다른 글
설명 계획과 실행 계획의 차이 (0) | 2023.07.20 |
---|---|
시간당 날짜 수에 따른 SQL Server 그룹? (0) | 2023.07.15 |
집계 쿼리에 대한 MongoDB의 성능 (0) | 2023.07.15 |
제외할 투영을 사용하여 Node.js MongoDB 찾기 _id가 여전히 반환합니다. (0) | 2023.07.15 |
파이썬에서 휠을 생성할 수 없는 이유는 무엇입니까? (0) | 2023.07.15 |