작업 디렉토리의 파일 (또는 파일)에 대한 변경 사항을 부분적으로 취소 할 수있는 명령이 있습니까?
파일을 많이 편집했지만 일부 변경 사항을 커밋 된 상태로 되돌리고 다른 변경 사항은 실행 취소하려고한다는 것을 알고 있다고 가정합니다.
나는에 대한 옵션을 구상하고있어 git checkout
그처럼 많이 작동 git add -p
, 그것은 덩어리하여 파일 덩어리를 통과하고 당신이 그것을 유지 여부를할지 묻는 즉.
답변
당신은 사용할 수 있습니다
git add -p <path>
특정 파일에 보관할 청크를 준비한 다음
git checkout -- <path>
파일의 준비된 버전을 확인하여 유지하지 않으려는 작업 트리 변경 사항을 삭제합니다.
마지막으로
git reset -- <path>
파일의 준비된 버전을 파일의 가장 최근 커밋 된 버전으로 되 돌리면 변경 내용이 준비되지 않은 상태로 유지됩니다.
답변
git 버전> = 1.7.1을 사용하면
git checkout -p
이 기능이 언제 도입되었는지 잘 모르겠습니다.
답변
git checkout $file
파일 상태를 $file
마지막 커밋 된 상태로 되돌립니다. git checkout SHA-1 -- $file
파일을 SHA-1로 식별 된 커밋으로 되 돌리는 데 사용할 수 있다고 생각합니다 .
답변
돌아가서 선택하려면 몇 개의 커밋이 필요합니까? 하나 인 경우에는 바로 전에 분기를 가져와 커밋 한 파일을 체크 아웃 한 다음 git add -p
원하는 방식으로 추가하는 데 사용 합니다. 그런 다음 이전 위치로 돌아가 임시 브랜치에서 파일을 체크 아웃 할 수 있습니다.
그건:
git checkout -b temp troublesome-commit^
git checkout troublesome-commit -- path/to/file
git add -p path/to/file
git commit -c troublesome-commit
git checkout @{-1}
git checkout temp -- path/to/file
git commit path/to/file
git branch -D temp
다른 대안으로는 뒤로 돌아가서 커밋을 편집하는 것 (커밋을으로 git rebase -i
표시 edit
한 다음 a git reset HEAD^
를 수행하고 셸로 다시 떨어질 때 커밋을 다시 실행)이 있습니다.
선택해야하는 변경 사항이 일련의 커밋에 분산되어있는 경우이를 패치 (또는 모두를 포함하는 패치)로 추출하고 패치를 직접 편집하여 유지하려는 변경 사항을 제거하는 것이 좋습니다. 및 잔여 물을 git apply --reverse
.