git selective 파일에서 로컬 변경 사항을 되돌리기 편집했습니다. 이제 svn revert와 같은 변경 사항을

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은 행 번호에 빨간색 / 녹색 / 파란색 표시를하여 항목이 삭제 / 추가 / 수정 된 위치를 나타냅니다 (각각).

이 마크를 마우스 오른쪽 버튼으로 클릭하면 해당 변경을 취소 할 수 있습니다. 또한 빨간색과 파란색 표시를 마우스 오른쪽 버튼으로 클릭하면 팝업에서 이전 버전을 볼 수 있습니다.