IT story

git에서 비 단계적 변경의 일부를 취소

hot-time 2020. 6. 10. 08:03
반응형

git에서 비 단계적 변경의 일부를 취소


git에서 스테이지되지 않은 변경 사항의 일부를 실행 취소하지만 나머지는 스테이지되지 않은 상태로 유지하려면 어떻게합니까? 내가 알아 낸 방법은 다음과 같습니다.

git commit --interactive
# Choose the parts I want to delete
# Commit the changes
git stash
git rebase -i master # (I am an ancestor of master)
# Delete the line of the most recent commit
git stash apply

이것은 효과가 있지만 git commit --interactive변경 사항을 되 돌리는 것과 같은 것이 있으면 좋을 것 입니다. 더 나은 방법이 있습니까?


당신은 사용할 수 있습니다 git checkout -p당신은 되돌리기에 작업 카피와 지수 사이의 DIFF에서 개별 심술쟁이를 선택할 수있는. 마찬가지로, git add -p인덱스에 추가 할 덩어리를 선택할 git reset -p수 있으며 인덱스와 HEAD 사이의 차이에서 인덱스에서 제거 할 개별 덩어리를 선택할 수 있습니다.

$ git checkout -p file/to/partially/revert
# or ...
$ git checkout -p .

이러한 변경 사항을 되돌리기 전에 보존하기 위해 미리 git 저장소를 스냅 샷으로 만들고 싶다면 다음과 같이하십시오.

$ git stash; git stash apply

자주 사용한다면 별명을 지정할 수 있습니다.

[alias]
    checkpoint = !git stash; git stash apply

좋은 편집기 모드 또는 플러그인을 사용하면 개별 덩어리 또는 줄을 쉽게 되돌릴 -p수 있습니다.이 옵션은 때때로 사용하기가 약간 어색 할 수 있으므로 되돌릴 줄을 직접 선택할 수 있습니다. Git 작업에 매우 유용한 Emacs 모드 인 Magit을 사용 합니다. Magit에서을 실행 magit-status하고 되돌릴 변경 사항의 차이점을 찾고 되돌릴 줄을 선택하십시오 (또는 한 번에 덩어리를 되 돌리지 않으려면 되돌릴 덩어리에 커서를 놓으십시오) 한 번에 한 줄씩)을 눌러 k해당 특정 줄을 되돌립니다. Emacs를 사용한다면 Magit을 강력히 추천합니다.


git diff > patchfile

그런 다음 패치 파일을 편집하고 실행 취소하지 않으려는 부분을 제거하십시오.

patch -R < patchfile

넌 할 수있어

git checkout master -- path/to/file

재설정하려는 각 파일마다.


어때요?

  1. 색인의 변경 사항으로 영향을받는 파일을 제거하십시오.
  2. git add -p색인에 원하는 변경 사항 만 다시 추가 하는 사용 하십시오.

'git status'를 실행하면 다음과 같이 표시됩니다.

$ git status
# On branch fr/fr.002
# Changed but not updated:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#   modified:   makefile
#
no changes added to commit (use "git add" and/or "git commit -a")
$

따라서 스테이지되지 않은 편집을 취소하려면 다음을 실행하라는 메시지가 표시됩니다.

git checkout -- makefile

Brian Campbell의 대답은 알 수없는 이유로 내 자식 버전 1.9.2.msysgit.0과 충돌하므로 내 접근 방식은 유지하려는 덩어리를 스테이징하고 작업 사본의 변경 사항을 버린 다음 무대를 비우는 것입니다.

$ git add -p
   ... select the hunks to keep
$ git checkout -- .
$ git reset HEAD .

당신이 할 수있는 git checkout그것을 실행 취소 할 부품의 이름을 이름을 제공합니다.

참고 URL : https://stackoverflow.com/questions/1981830/undo-part-of-unstaged-changes-in-git

반응형