작업 디렉토리의 파일 (또는 파일)에 대한 변경 사항을 부분적으로 취소 할 수있는 명령이 있습니까?
파일을 많이 편집했지만 일부 변경 사항을 커밋 된 상태로 되돌리고 다른 변경 사항은 실행 취소하려고한다는 것을 알고 있다고 가정합니다.
나는에 대한 옵션을 구상하고있어 git checkout그처럼 많이 작동 git add -p, 그것은 덩어리하여 파일 덩어리를 통과하고 당신이 그것을 유지 여부를할지 묻는 즉.
답변:
당신은 사용할 수 있습니다
git add -p <path>
특정 파일에 보관할 청크를 준비한 다음
git checkout -- <path>
파일의 준비된 버전을 확인하여 유지하지 않으려는 작업 트리 변경 사항을 삭제합니다.
마지막으로
git reset -- <path>
파일의 준비된 버전을 파일의 가장 최근 커밋 된 버전으로 되 돌리면 변경 내용이 준비되지 않은 상태로 유지됩니다.
revert명령을 사용하여 파일 내에서 되돌릴 변경 사항을 선택할 수 있습니까? CVS와 Git에 대한 경험이 있기 때문에 진심으로 묻습니다. Git에서는 git checkout -- path/to/file해당 파일의 모든 변경 사항을 되 돌리는 단일 명령이지만 위와 동일하지는 않습니다.
git checkout --patch와 git reset --patch같은 작업을하는 git add --patch최신 자식에가.
--일반적으로 옵션 구문 분석의 끝을 나타내며 그 뒤에 오는 모든 인수는 문자 그대로 해석됩니다. 즉 ./, 파일 이름이 뒤에 오면 빼기 기호로 시작하는 파일 이름 앞에 추가 할 필요가 없습니다 --.
git checkout --patch때 diff가 거꾸로 보입니다. 마이너스 기호는 작업 복사본에 텍스트를 추가하고 더하기 기호는 작업 복사본에서 줄을 제거합니다.
git 버전> = 1.7.1을 사용하면
git checkout -p
이 기능이 언제 도입되었는지 잘 모르겠습니다.
git reset -p스테이징 영역 / 인덱스에서 변경 사항을 선택적으로 언 스테이징하기 위해 수행 할 수도 있다는 점을 언급 할 가치가 있습니다 . 나는 또한 이것이 어떤 버전의 Git에 도입되었는지 내 머리 꼭대기에서 알지 못합니다.
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.