[git] Git의 파일에 대한 변경 사항을 선택적으로 되돌 리거나 체크 아웃 하시겠습니까?

작업 디렉토리의 파일 (또는 파일)에 대한 변경 사항을 부분적으로 취소 할 수있는 명령이 있습니까?

파일을 많이 편집했지만 일부 변경 사항을 커밋 된 상태로 되돌리고 다른 변경 사항은 실행 취소하려고한다는 것을 알고 있다고 가정합니다.

나는에 대한 옵션을 구상하고있어 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.


답변