git: Pushing Single Commits, Изменение порядка с rebase, Duplicate Commits

Я хочу отправить несколько отдельных коммитов на удаленное репозиторий git. Я последовал ответу Джеффа, найденному здесь, чтобы сделать это:

Как я могу выдвинуть определенный коммит на удаленный, а не предыдущий коммит?

Коммиты, которые я хочу выдвинуть, не стоят на первом месте, поэтому мне нужно сначала изменить порядок коммитов, используя rebase, и я использовал эти инструкции для этого:

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

По сути я сделал:

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

Я получил ошибки, делая это. Поэтому я начал глубже изучать проблему. Я обнаружил, что в моем журнале есть повторяющиеся коммиты, если я сделаю второй git pull после перебазировки, например:

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

Итак, я разместил этот вопрос:

git: дублирование фиксируется после локальной перебазировки с последующим Pull

Ответ Роджера привел меня к этому вопросу: почему я вижу двойные коммиты после перебазирования и вытягивания?

Сверху журнал перед перебазированием выглядит так:

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

И журнал после перебазировки выглядит так:

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

Обратите внимание, что исходные 2 коммитов 2fc4fe7 и b7a8656 имеют новые SHA; 9777c56 и a2d7d8b. Я считаю, что это начало проблемы.

Теперь, после того, как я сделаю еще один git pull, журнал будет выглядеть так:

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

Обратите внимание, что удаленные коммиты теперь дублируются, и исходные SHA удаленных коммитов, 2fc4fe7 и b7a8656, вернулись.

В ответе Роджера он сказал, что это похоже на вину других людей, подталкивающих к мерзости, и что они опровергают свои уже выдвинутые коммиты. Но я полагаю, что это моя вина, что я локально опровергаю выдвинутый коммит.

Это потому, что я перебазировал коммит, который уже был передан на удаленный компьютер? Если так, что я должен был сделать, чтобы избежать этого? Мне нужно перебазировать мои коммиты, чтобы я мог нажать один коммит. Должен ли я использовать систему ветвления для этого? Если да, то как бы я использовал ветки для решения этой проблемы?

Ответы на вопрос(1)

Ваш ответ на вопрос