나는 5 커밋과 같은 커밋에 추가 할 파일을 삭제했다는 것을 깨달았다. 커밋 메시지에서 파일이 포함되었다고했는데 "Ok!이 파일을 커밋 #XXXXX에 추가하는 것을 잊어 버렸습니다"라는 문구로 새로운 커밋을하고 싶지 않습니다.이전 git commit을 편집하려면 어떻게해야합니까?
이전에 편집 한 내용을 편집하는 가장 좋은 방법은 무엇입니까? 커밋하면 파일을 추가 할 수 있습니까?
나는 5 커밋과 같은 커밋에 추가 할 파일을 삭제했다는 것을 깨달았다. 커밋 메시지에서 파일이 포함되었다고했는데 "Ok!이 파일을 커밋 #XXXXX에 추가하는 것을 잊어 버렸습니다"라는 문구로 새로운 커밋을하고 싶지 않습니다.이전 git commit을 편집하려면 어떻게해야합니까?
이전에 편집 한 내용을 편집하는 가장 좋은 방법은 무엇입니까? 커밋하면 파일을 추가 할 수 있습니까?
수정 사항을 적용한 다음 git rebase --interactive
을 사용하여 커밋을 재정렬하고 두 커밋을 함께 스쿼시하십시오. 자세한 내용은 the git book을 참조하십시오.
저장소 히스토리를 변경하기 때문에 커밋이 이미 푸시 된 경우이 작업을 수행하는 것은 좋지 않습니다.
예 세션은 다음과 같이 수 :
% git init
Initialized empty Git repository in /home/user/repo/.git/
% echo "A line" > a.txt
% echo "A line" > b.txt
% git add a.txt b.txt
% git commit -m "Initial commit"
[master (root-commit) c6329d0] Initial commit
2 files changed, 2 insertions(+), 0 deletions(-)
create mode 100644 a.txt
create mode 100644 b.txt
귀하의 불완전한 커밋 :
% echo "Another line" >> a.txt
% git add a.txt
% git commit -m "Important changes"
[master 0d28cfa] Important changes
1 files changed, 1 insertions(+), 0 deletions(-)
다른 어떤 커밋 : 당신이 뭔가를해야만 잊어 버린
% echo "Yet another line" >> b.txt
% git add b.txt
% git commit -m "Other changes"
[master 96a092d] Other changes
1 files changed, 1 insertions(+), 0 deletions(-)
주의 사항 :
2,763,210은 git rebase -i
와 역사를 수정 :
% git rebase -i HEAD~3
: 그것은 있도록이 "죄송합니다"커밋이
pick 0d28cfa Important changes
pick 96a092d Other changes
pick 9dce889 Oops
변경입니다 한 줄 위를 이동하여 pick
을 squash
(또는 단지 s
)으로 변경하여 앞의 커밋과 결합하십시오.
pick 0d28cfa Important changes
s 9dce889 Oops
pick 96a092d Other changes
그런 다음 파일을 저장하고 편집을 종료하십시오. 그러면 다른 편집기가 팝업되어 결합 된 커밋에 대한 커밋 메시지를 편집 할 수 있습니다. 다음과 같이 표시됩니다.
# This is a combination of 2 commits.
# The first commit's message is:
Important changes
# This is the 2nd commit message:
Oops
느낌이 적절할 때 변경 한 다음 저장하고 종료하십시오.
마지막으로, 새로운 실제로 두 커밋의 조합 커밋 확인 :
% git log -p HEAD~2..HEAD~1
commit 7a4c496956eb269c551bbf027db8b0f2320b65e4
Author: User Name <[email protected]>
Date: Fri Feb 3 22:57:31 2012 +0100
Important changes
diff --git a/a.txt b/a.txt
index 8d7158c..54df739 100644
--- a/a.txt
+++ b/a.txt
@@ -1 +1,3 @@
A line
+Another line
+Important line forgotten previously
당신은 확인하기 위해 git commit --fixup <hash>
를 사용할 수있는 특수가가와 병합 될 것입니다 커밋 표시된 이전의 그 해시 커밋 <hash>
입니다. 누락 된 파일을 추가하거나 오타를 수정하는 데 이상적입니다.
일단 수정 커밋을 얻으면 git rebase --interactive --autosquash <starting-point>
을 사용하여 수정 커밋을 실제로 <hash>
커밋으로 병합해야합니다. rebase의 <starting-point>
은 <hash>
커밋 이전의 일부 지점이어야합니다 (단순화를 위해 <hash>^
을 사용할 수 있음).
히스토리 다시 쓰기에 대한 일반적인주의 사항이 적용됩니다. 다른 사용자가 가져온 지점을 이미 게시 한 경우 재 작성된 기록으로 다시 푸시하면 일반적으로 많은 혼란과 병합 문제가 발생합니다. 이 경우 수정을 새로운 커밋으로 푸는 것이 더 간단합니다.
참고 : git config --global rebase.autosquash true
은 기본적으로 자동 스쿼시를 켜기 때문에 더 이상 rebase 대화식 명령에 --autosquash
옵션을 전달할 필요가 없습니다. 이것은 좋은 기본값입니다. autosquashing의
좋은 walkthough는 여기에서 찾을 수 있습니다하십시오 그것을하기 위해 https://robots.thoughtbot.com/autosquashing-git-commits
가 git squash
을한다. 편집을 위해 e
또는 'R'을 선택 - 당신이 당신의 커밋 스쿼시되면
// X is the number of commits you wish to edit
git rebase -i HEAD~X
.
보존을 위해 최신 커밋에 대해을 선택하십시오.
는 필터 지점을 사용하는 것입니다.
이 샘플에서는 전자 메일을 변경했지만 메시지에도 동일하게 적용됩니다.
git filter-branch --commit-filter '
if [ "$GIT_COMMITTER_NAME" = "<Old Name>" ];
then
GIT_COMMITTER_NAME="<New Name>";
GIT_AUTHOR_NAME="<New Name>";
GIT_COMMITTER_EMAIL="<New Email>";
GIT_AUTHOR_EMAIL="<New Email>";
git commit-tree "[email protected]";
else
git commit-tree "[email protected]";
fi' HEAD `
나는보다 철저한 설명과, 심지어는 연습을 좋아하지만, 이것이 출발점이라고 생각합니다. – Hubro
예를 추가했습니다. 도움이되기를 바랍니다. –