짧은 대답 : 적절한 방법은 없습니다.
git commit --amend
은 이전의 커밋을 유사하지만 변경된 커밋으로 "바꾸기"위한 것입니다. 원래 커밋을 변경하지 않았습니다. 아직 거기에 있지만 아무것도 더 이상 참조하고 뭔가 참조하지 않는 한 결국 가비지 수집됩니다.
로컬로 완료되면 투명합니다. 그러나 커밋을 푸시하면 본질적으로 너무 늦습니다. 이미 커밋을 공유 한 다른 사람들과 그 커밋을 기반으로 작업을 공유했습니다. 그 커밋을 다른 커밋으로 대체 할 수는 없습니다. 실제로 '새가 커밋 만들 것이다,
B - A <- master
그런 다음 당신은 당신의 마음을 변경하고 개정 :
당신이이 A (L 트 B 후) 커밋하게 말할 수 있습니다. 현재 분기가이 새로운 커밋을 가리 킵니다. 원래 커밋 A는 여전히 존재하지만 먼저, 당신은 정상 추진을 할 수 없습니다 것
local remote
B - A <-master B - A <- origin/master
다음은 수정 밀어 경우에는 지점이
B - A
\
A' <- master
를 가리키는되지 않습니다, 그 푸시가 아닐 것이기 때문에 빨리 감기 문제를 Excacerbating
local remote
B - A B - A <- origin/master
\
A' <- master
병합 : 다른 사람은 이미
,691을 커밋하여 사용하고 있습니다
local remote
B - A B - A - C <- origin/master
\
A' <- master
수정을 한 다음 강제 누름 git push -f
을 수행 할 수 있습니다. 그러나 그것은 원래의 커밋에 기반한 다른 개발자들에게는 문제를 일으킬 것입니다. 리베이스 (rebase)와 같은 문제입니다 (commit --amend
은 일종의 미니 리베이스입니다). 자세한 설명은 "The Perils of Rebasing" section of the Git Pro book을 참조하십시오.
local remote
B - A B - A - C
\ \
A' <- master A' <- origin/master