programing

Git에서 준비되지 않은 변경 내용의 일부 실행 취소

minimums 2023. 7. 17. 20:51
반응형

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변경 내용을 되돌리는 경우에만 해당됩니다.더 좋은 방법은 없습니까?

를 사용하면 작업 복사본과 인덱스 사이의 차이에서 개별 힙을 선택하여 되돌릴 수 있습니다.마찬가지로 인덱스에 추가할 헝크를 선택할 수 있으며 인덱스와 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의 답변은 제 git 버전 1.9.2.msysgit.0과 충돌합니다. 이유를 알 수 없습니다. 그래서 저의 접근 방식은 제가 유지하고 싶은 hunk를 단계별로 배치하고, 작업 복사본의 변경 사항을 폐기한 다음 단계별로 전환하는 입니다.

$ 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

반응형