[git] 커밋의 파일 변경 사항 되돌리기

특정 커밋에 의한 변경 사항을 주어진 파일에만 되돌리고 싶습니다.

이를 위해 git revert 명령을 사용할 수 있습니까?

다른 간단한 방법이 있습니까?



답변

내가 본 가장 깨끗한 방법은 여기에 설명되어 있습니다.

git show some_commit_sha1 -- some_file.c | git apply -R

VonC의 응답 git show과 유사하지만 및 git apply.


답변

커밋 기록을 변경해도 좋다고 가정하면 다음은 이전 커밋에서 단일 파일의 변경 사항을 되 돌리는 워크 플로입니다.

예를 들어 badfile.txtcommit 에서 1 개 파일 ( )의 변경 사항을 되돌리려 고합니다 aaa222.

aaa333 Good commit
aaa222 Problem commit containing badfile.txt
aaa111 Base commit

기본 커밋을 기반으로 문제 커밋을 수정하고 계속하십시오.

1) 대화 형 리베이스 시작 :

git rebase -i aaa111

2) 문제를 마크 변경하여 편집기에서 편집 커밋 picke(편집 용) :

e aaa222
pick aaa333

3) 변경 사항을 잘못된 파일로 되돌립니다.

git show -- badfile.txt | git apply -R

4) 변경 사항 추가 및 커밋 수정 :

git add badfile.txt
git commit --amend

5) 리베이스 완료 :

git rebase --continue


답변

git revert 커밋 내의 모든 파일 내용을위한 것입니다.

단일 파일의 경우 다음과 같이 스크립팅 할 수 있습니다 .

#!/bin/bash

function output_help {
    echo "usage: git-revert-single-file <sha1> <file>"
}

sha1=$1
file=$2

if [[ $sha1 ]]; then
git diff $sha1..$sha1^ -- $file | patch -p1
else
output_help
fi

( smtlaissezfairegit-shell-scripts 유틸리티에서 )


노트 :

현재 수정 사항을 아직 커밋하지 않은 경우 다른 방법이 여기설명되어 있습니다 .

git checkout -- filename

git checkout 파일에 대한 몇 가지 옵션이 있으며 HEAD에서 파일을 수정하고 변경 사항을 덮어 씁니다.


Dropped.on.Caprica댓글에서 언급합니다 .

git에 별칭을 추가하여 git revert-file <hash> <file-loc>특정 파일을 되돌릴 수 있습니다. 이 요점을
참조하십시오 .

[alias]
  revert-file = !sh /home/some-user/git-file-revert.sh


답변

--no-commit옵션을 사용하여 git-revert마지막으로 커밋하기 전에 인덱스에서 되 돌리지 않으려는 파일을 제거합니다. 다음은 최근 두 번째 커밋에서 foo.c의 변경 사항 만 쉽게 되 돌리는 방법을 보여주는 예입니다.

$ git revert --no-commit HEAD~1
$ git reset HEAD
$ git add foo.c
$ git commit -m "Reverting recent change to foo.c"
$ git reset --hard HEAD

첫 번째는 git-reset모든 파일을 “언 스테이징”하여 되돌리려는 파일 하나만 다시 추가 할 수 있도록합니다. 마지막 git-reset --hard은 우리가 유지하고 싶지 않은 나머지 파일 되돌림을 제거합니다.


답변

훨씬 간단합니다.

git reset HEAD^ path/to/file/to/revert

그때

git commit --amend

그리고

git push -f

파일이 사라지고 커밋 해시, 메시지 등이 동일합니다.


답변

git reset HEAD^ path/to/file/to/revert/in/commit

위의 명령은 커밋에서 파일을 가져 오지만 git status.

git checkout path/to/file/to/revert/in/commit

위의 명령은 변경 사항을 되돌립니다 (결과적으로 HEAD와 동일한 파일을 얻음).

git commit

( --amend커밋을 수정하려면 전달하십시오.)

git push

이를 통해 이미 커밋에있는 파일을 제거하고 되돌립니다.

위의 단계는 커밋이 이루어진 지점에서 따라야합니다.


답변

다음 절차를 따를 수 있습니다.

  1. git revert -n <*commit*>( -n모든 변경 사항을 되돌 리지만 커밋하지는 않음)
  2. git add <*filename*> (되돌리고 커밋하려는 파일의 이름)
  3. git commit -m 'reverted message' (되돌릴 메시지 추가)
  4. 커밋 한 후에는 다른 파일 변경 사항을 무시하여 되돌리기 전에 커밋 한 변경 사항으로 파일이 업데이트 된 상태로 유지됩니다.