svn repo를 추적하는 git repo에서 단일 파일을 여러 번 편집했습니다.
이제 svn revert와 같은 변경 사항을 되돌리고 싶지만 파일의 일부만 되돌리고 싶습니다.
파일에서 diff를보고 원하지 않는 변경 사항을 버리고 (변경) 원하는 변경 사항을 유지하고 싶습니다.
그만큼
git add -i
명령에 옵션이있는 것 같지만 아직이 단계를 수행하고 싶지 않습니다.
답변
로 직접 할 수 있습니다 git checkout -p
. 아래의 Daniel Stutzbach의 답변을 참조하십시오.
이전 답변 (이전 checkout -p
소개) :
다음과 같이 할 수 있습니다 :
git add -i
(보관하려는 덩어리를 선택하십시오)
git commit -m "tmp"
이제 유지하려는 변경 사항 만 커밋하고 나머지는 준비되지 않았습니다.
git reset --hard HEAD
이 시점에서 커밋되지 않은 변경 사항이 삭제되었으므로 계속 커밋하려는 변경 사항이있는 깨끗한 작업 디렉토리가 있습니다.
git reset --mixed HEAD^
이렇게하면 마지막 커밋 ( ‘tmp’)은 제거되지만 작업 디렉토리의 수정 사항은 스테이지되지 않은 상태로 유지합니다.
편집 : 교체 --soft
로는 --mixed
, 준비 영역을 청소합니다.
답변
나는 당신이 가장 간단하게 할 수 있다고 믿습니다.
git checkout -p <optional filename(s)>
맨 페이지에서 :
−p, −−patch Interactively select hunks in the difference between the <tree−ish> (or the index, if unspecified) and the working tree. The chosen hunks are then applied in reverse to the working tree (and if a <tree−ish> was specified, the index).
This means that you can use git checkout −p to selectively discard
edits from your current working tree.
답변
git diff
파일에서 실행 하고 결과 diff를 저장하고 편집하여 변경 사항을 제거 할 수 있습니다 않습니다 후, 저장할 그것을 통해 실행patch -R
남아있는 차이점을 취소 할 수 있습니다.
git diff file.txt> patch.tmp # 유지하려는 덩어리를 제거하려면 patch.tmp를 편집하십시오. 패치 -R <patch.tmp
답변
당신이 원하는 것 같습니다
git revert --no-commit $REVSISON
그런 다음 사용할 수 있습니다
git diff --cached
커밋하기 전에 어떤 변경 사항이 있는지 확인하십시오.
순수한 Git 리포지토리를 사용했다면 목표에 따라 대화 형 리베이스 ( git rebase -i
)를 사용하여 마음에 들지 않는 커밋으로 돌아가 커밋을 소급하여 편집하여 원하지 않는 변경 사항이 발생하지 않도록 할 수 있습니다. , 그러나 일반적으로 알고있는 경우에만 다시 표시되지 않습니다.
답변
질문을 다시 읽으면 작업 트리에있는 변경 사항을 되돌리고 싶지만 이전에 커밋 된 변경 사항은 되 돌리지 않지만 다른 답변 중 일부는 내 읽기가 잘못 된 것처럼 들립니다. 당신은 명확히 할 수 있습니까?
변경 사항이 작업 복사본에있는 경우 가장 쉬운 방법은 다음과 같이 변경 내용을 준비하는 것입니다.
git add -i <file>
그런 다음 인덱스 버전을 확인하여 유지하지 않으려는 변경 사항을 버립니다.
git checkout -- <file>
그런 다음 아직 준비하지 않으려면 변경 사항을 취소하십시오.
git reset -- <file>
이 레시피는 선택한 변경 사항을 파일 (또는 지정한 파일)로 되돌리고 임시 커밋을 작성하지 않고 되돌릴 필요가 있습니다.
이전 커밋에서 이루어진 일부 변경 사항 만 선택적으로 적용하려면 먼저 파일을 이전 커밋 된 상태로 재설정 할 수 있습니다.
git reset <commit_before_first_unwanted_change> -- <file>
그런 다음 이전 레시피에 따라 git add -i <file>
유지하려는 변경 사항을 스테이징하고, git checkout -- <file>
원치 않는 변경 사항을 버리고 변경 사항 git reset -- <file>
을 ‘스테이지 해제’할 수 있습니다.
답변
여기 답변에 설명 된 명령 줄 옵션은 파일이 ssh 터미널을 통해 액세스하는 서버에있을 때 편리합니다. 그러나 파일이 로컬 컴퓨터에 있으면 다음 방법을 선호합니다.
netbeans 편집기 (git 지원과 함께 제공)에서 파일을 엽니 다. Netbeans은 행 번호에 빨간색 / 녹색 / 파란색 표시를하여 항목이 삭제 / 추가 / 수정 된 위치를 나타냅니다 (각각).
이 마크를 마우스 오른쪽 버튼으로 클릭하면 해당 변경을 취소 할 수 있습니다. 또한 빨간색과 파란색 표시를 마우스 오른쪽 버튼으로 클릭하면 팝업에서 이전 버전을 볼 수 있습니다.