2013-06-18 2 views
0

커밋을 푸시했는데 커밋 메시지를 변경해야한다는 것을 깨달았습니다.푸시 된 커밋 메시지 수정하기

그래서 내 지역의 repo에 내가 그랬어 :

git commit --amend -m "New commit message" 

을하지만 다음이 밀어하려고 할 때, 나는

Updates were rejected because the tip of your current branch is behind 
hint: its remote counterpart. Merge the remote changes (e.g. 'git pull') and try again 

이 개정 할 길을 잘못 되었습니까 말하는 오류 메시지의 부하를 가지고 내 메시지? 결국 나는 모든 repos를 리셋 한 다음 새로운 메시지로 커밋을 다시해야합니다.

제 질문은 이미 밀린 메시지의 커밋 메시지를 수정하는 올바른 방법은 무엇입니까?

답변

2

짧은 대답 : 적절한 방법은 없습니다.

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 
0

git push --force을 할 수 있지만 저장소가 손상 될 수 있습니다. 힘내 철학은 하나 또는 다른 이유로 역사를 바꾸는 것에 반대한다.