Отсутствует параметр + в git push после git rebase - PullRequest
0 голосов
/ 22 июня 2019

Я хочу раздавить коммиты в git после того, как их толкнули.Поэтому я нахожу вопрос Как раздавить коммиты в git после того, как они были выдвинуты? .

Я делаю так, как принятый ответ сказал:

git rebase -i origin/master~4 master

Но я забылдобавить параметр + перед мастером, одновременно передав его в github.Это означает, что я использую git push origin master вместо git push origin +master.

Я хочу знать, имеет ли это большое значение и как отменить это, чтобы я мог использовать правильную команду.

------------------- EDIT1 ----------------------------

Я использую emacs magit в качестве моего git-клиента, поэтому, в частности, я использую magit-push-other origin master.

Журнал Magit находится ниже, красный прямоугольник окружает два коммита, которые я хочу раздавить.После того, как я раздавил эти два коммита, magit сообщает мне, что один коммит без толчка и два коммита вышли из апстрима.Затем я использую magit-pull-from-upstream и magit-push-other origin master для завершения этих изменений.Тогда журнал фиксации - это то, что рисует картинка.

magit-log

Если git push origin master не сработает в этой ситуации, похоже, это больше похоже на магнитвопрос.

Ответы [ 2 ]

2 голосов
/ 02 июля 2019

Что делать, если вы забыли параметр +

+ означает сделать толчок . Если вы забудете об этом в случае, если это необходимо, вы получите сообщение об ошибке. Решение тогда состоит в том, чтобы сделать это снова с +.

Но вы должны действительно узнать больше о переписывании истории в git, прежде чем использовать подобные методы.

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


Почему вы не получили ошибку и почему результат оказался не таким, как ожидалось?

Проблема в том, что вы сделали тягу после сквоша.

Почему git показывает, что один коммит неотжат и два коммита объединены из апстрима?

Вы создали два коммита A и B и подтолкнули их к источнику. Теперь, когда вы уничтожаете эти коммиты локально, оба удаляются и заменяются новым коммитом C.

Затем git видит два коммита (A и B) по источнику, которых нет в вашей истории - конечно, вы просто удалили их. Если вы сделаете git pull, то только что удаленные вами коммиты и только что созданный будут объединены.

Решение 1:

Не переписывайте историю, когда она выдвинута!

Решение 2:

Не тяните после сдавливания, просто нажмите толчок. На самом деле не делайте этого с общими ветками!

2 голосов
/ 30 июня 2019

Как указала @rkta, проблема возникла, когда вы выполняли вытягивание после сдавливания: вы заметите, что в вашем журнале Git теперь есть три коммита для редактирования ваших грамматических ошибок: исходные два, плюс сжатый, объединены вместев c6f979b.Этот коммит слияния был создан git pull.

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

Как говорится, вот каквы все еще можете это исправить, и как вы могли бы это исправить в первую очередь:

git pull
git rebase -i a8ba675
# mark the grammatical error commits to be squashed -
# this will still work even though you already merged
git fetch
# use git log --all to make sure no one committed anything since the pull above
git push origin +master
# pray no one comes to yell at you
...