특정 커밋에 의한 변경 사항을 주어진 파일에만 되돌리고 싶습니다.
이를 위해 git revert 명령을 사용할 수 있습니까?
다른 간단한 방법이 있습니까?
답변
내가 본 가장 깨끗한 방법은 여기에 설명되어 있습니다.
git show some_commit_sha1 -- some_file.c | git apply -R
VonC의 응답 git show
과 유사하지만 및 git apply
.
답변
커밋 기록을 변경해도 좋다고 가정하면 다음은 이전 커밋에서 단일 파일의 변경 사항을 되 돌리는 워크 플로입니다.
예를 들어 badfile.txt
commit 에서 1 개 파일 ( )의 변경 사항을 되돌리려 고합니다 aaa222
.
aaa333 Good commit
aaa222 Problem commit containing badfile.txt
aaa111 Base commit
기본 커밋을 기반으로 문제 커밋을 수정하고 계속하십시오.
1) 대화 형 리베이스 시작 :
git rebase -i aaa111
2) 문제를 마크 변경하여 편집기에서 편집 커밋 pick
에 e
(편집 용) :
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
( smtlaissezfaire 의 git-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
이를 통해 이미 커밋에있는 파일을 제거하고 되돌립니다.
위의 단계는 커밋이 이루어진 지점에서 따라야합니다.
답변
다음 절차를 따를 수 있습니다.
git revert -n <*commit*>
(-n
모든 변경 사항을 되돌 리지만 커밋하지는 않음)git add <*filename*>
(되돌리고 커밋하려는 파일의 이름)git commit -m 'reverted message'
(되돌릴 메시지 추가)- 커밋 한 후에는 다른 파일 변경 사항을 무시하여 되돌리기 전에 커밋 한 변경 사항으로 파일이 업데이트 된 상태로 유지됩니다.