git: Enviando confirmações únicas, reordenando com rebase, confirmações duplicadas

Eu quero enviar vários commits únicos para um repositório remoto git. Eu segui a resposta de Geoff encontrada aqui para fazer isso:

Como enviar por push o commit específico para um controle remoto, e não o commit anterior?

Os commits que eu quero enviar não estão na cabeça, então eu tenho que reordenar os commits usando rebase primeiro e usei estas instruções para fazer isso:

http://gitready.com/advanced/2009/03/20/reorder-commits-with-rebase.html

Essencialmente, eu fiz:

git clone
git commit
git commit
...
git pull
git rebase -i HEAD~3
git push origin <SHA>:master

Eu tenho erros ao fazer isso. Então comecei a olhar mais profundamente para o problema. Descobri que há confirmações duplicadas no meu log se eu fizer um segundo puxar git após o rebasing, por exemplo:

git clone
git commit
git commit
...
git pull
git log --pretty=format:"%h - %an : %s" // log before rebasing
git rebase -i HEAD~3
git pull
git log --pretty=format:"%h - %an : %s" // log after rebasing
git pull 
git log --pretty=format:"%h - %an : %s" // log after rebasing after pulling

Então eu postei esta pergunta:

git: Confirmações duplicadas após rebase local seguida por pull

A resposta de Roger me levou a esta pergunta: Por que vejo confirmações duplicadas após rebasear e puxar?

Acima, o log antes de rebasear se parece com:

84e4015 - Me : Local Commit 3
0dbe86a - Me : Local Commit 2
d57ba2a - Me : Merge branch 'master' of remote repository
a86ea35 - Me : Local Commit 1 before reordering
2fc4fe7 - Remote User 2 : Remote Commit 2
b7a8656 - Remote User 1 : Remote Commit 1
8ce80fc - Me : Merge branch 'master' of remote repository

E o log após o rebaseamento se parece com:

cf1ff7b - Me : Local Commit 3
cd14463 - Me : Local Commit 2
b9d44fb - Me : Local Commit 1 after reordering
9777c56 - Remote User 2 : Remote Commit 2
a2d7d8b - Remote User 1 : Remote Commit 1
8ce80fc - Me : Merge branch 'master' of remote repository

Observe que o 2 original confirma 2fc4fe7 e b7a8656 têm novos SHAs; 9777c56 e a2d7d8b. Eu acredito que este é o começo do problema.

Agora, depois de fazer outro git, o log fica assim:

e8e1a85 - Me : Merge branch 'master' of remote repository
cf1ff7b - Me : Local Commit 3
cd14463 - Me : Local Commit 2
b9d44fb - Me : Local Commit 1 after reordering
9777c56 - Remote User 2 : Remote Commit 2
a2d7d8b - Remote User 1 : Remote Commit 1
2fc4fe7 - Remote User 2 : Remote Commit 2 // duplicate 2
b7a8656 - Remote User 1 : Remote Commit 1 // duplicate 1
8ce80fc - Me : Merge branch 'master' of remote repository

Observe que as confirmações remotas agora estão duplicadas e os SHAs originais das confirmações remotas, 2fc4fe7 e b7a8656, retornaram.

Na resposta de Roger, ele disse que parecia ser culpa de outras pessoas pressionando o git e que estavam rebaixando seus compromissos já enviados. Mas acredito que é minha culpa rebasear localmente um commit enviado.

Isso ocorre porque eu refiz uma nova confirmação que já havia sido enviada para o controle remoto? Se sim, o que eu deveria ter feito para evitar isso? Preciso refazer meus commits para poder enviar um único commit. Eu deveria ter usado um sistema de ramificação para fazer isso? Em caso afirmativo, como eu usaria ramificações para resolver esse problema?

questionAnswers(1)

yourAnswerToTheQuestion