Почему у меня должен быть конфликт после push-›изменить-›изменить-›изменить-›push-›pull?

В этом вопросе Git предотвращает отправку после изменения коммита, это было упомянуто тот:

Это должно иметь место только в том случае, если вы изменяете уже отправленный коммит.

Но я сделал следующие шаги:

  1. Нажал кучу кода
  2. совершить --изменить
  3. совершить --изменить
  4. совершить --изменить
  5. Толкнул
  6. Тянуть (КОНФЛИКТ (содержание))

Этот конфликт может произойти и в будущем, так как я не понимаю, почему конфликт произошел! Может ли кто-нибудь пролить свет на процесс?


На шаге 4:

$ git commit --amend
[dev cf0f21d] blahhh(blah) is added
 Date: Wed Sep 30 08:39:28 2015 +0330
 5 files changed, 168 insertions(+), 1 deletion(-)

На шаге 5:

$ git push origin dev
To repo:~/something
 ! [rejected]        dev -> dev (non-fast-forward)
error: failed to push some refs to 'repo:~/something'
hint: Updates were rejected because the tip of your current branch is behind
hint: its remote counterpart. Integrate the remote changes (e.g.
hint: 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.

person Alireza    schedule 30.09.2015    source источник
comment
Кто-то еще внес изменения в тот же файл выше по течению? Можете ли вы добавить журнал коммитов конкретно для измененных файлов?   -  person hoppa    schedule 30.09.2015
comment
Итак, вы исправляете уже отправленный коммит на шагах 2, 3 и 4?   -  person Martin G    schedule 30.09.2015
comment
Я думаю, что шаги 5 и 6 следует поменять местами, иначе git будет жаловаться.   -  person cafebabe1991    schedule 30.09.2015
comment
@Martin, на шагах 2, 3 и 4 я изменил некоторые файлы, а затем использовал исправление.   -  person Alireza    schedule 30.09.2015
comment
Почему голосование против? подскажите как улучшить вопрос...   -  person Alireza    schedule 30.09.2015


Ответы (1)


На шагах 2, 3, 4 вы изменяете коммит, который уже отправлен в 1

Commit amend изменяет последний коммит в репозитории. Следовательно, вы изменяете фиксацию, которую вы уже отправили в 1. Вам нужно создать новую фиксацию после (1), а затем вы можете изменить эту фиксацию по своему желанию.

Кроме того, на шаге 5 вы должны были получить предупреждение или, скорее всего, вы сделали принудительное нажатие

person Harish Ved    schedule 30.09.2015
comment
Я добавил несколько файлов в staged на шагах 2, 3 и 4, а затем использовал commit --amend. Что с этим не так? - person Alireza; 30.09.2015
comment
На шаге 5 я не нажимал силой. Без предупреждения. - person Alireza; 30.09.2015
comment
Эти промежуточные файлы были «прикреплены» к последней фиксации в вашем рабочем дереве. Поскольку он «изменил» последний коммит. И вы уже отправили свой последний коммит в (1) - person Harish Ved; 30.09.2015
comment
Когда я нажал, он был отклонен, так почему же выдача git pull вызвала конфликт? - person Alireza; 30.09.2015
comment
Потому что локально у вас был этот «исправленный» коммит. На пульте была исходная фиксация вместе с любыми новыми изменениями. Итак, git pull должен потерпеть неудачу, потому что и локальный, и удаленный находятся в разных HEAD. - person Harish Ved; 30.09.2015
comment
локальный -- commit1 -> commit2 удаленный -- commit1 -> commit2 после шага 2 local -- commit1 - › измененный коммит2 удаленный -- коммит1 -> коммит2. Поэтому, когда вы выполняете git pull, он будет сбит с толку относительно того, что должно произойти с «исправленным коммитом2» и где он должен разместить «коммит2» (что теперь является новым для вашего локального рабочего дерева). - person Harish Ved; 30.09.2015
comment
Давайте продолжим обсуждение в чате. - person Alireza; 30.09.2015