git pull отменяет изменения - PullRequest
0 голосов
/ 06 июня 2019

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

подсказка: обновления были отклонены, поскольку кончик вашей текущей ветки находится позади подсказка: его удаленный аналог. Интеграция удаленных изменений (например, подсказка: 'git pull ...') перед повторным нажатием. Подсказка: подробности см. в «Примечании о быстрой перемотке вперед» в «git push --help».

И затем, когда я выполняю git pull, мои изменения возвращаются к изменениям исходного коммита (вновь появляется удаленная часть). Как мне это исправить?

Ответы [ 2 ]

0 голосов
/ 06 июня 2019

Как упомянул Джоран, ваш апстрим не синхронизирован с локальным, как вы исправили. Если вы собираетесь использовать force, я бы порекомендовал использовать --force-with-lease, так как это только принудительно заставляет, если никто, кроме вас, не совершил в восходящем потоке.

Это спасает вас от написания работы коллег, поскольку это только заставит заменить вашу работу

Как правило, я считаю, что лучше снова разветвляться.

git checkout -b "my-feature-branch-fix"
git push -u origin my-feature-branch-fix

Как только вы это сделаете и объедините, вернитесь и удалите старую ветку

git branch -D branch_name

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

0 голосов
/ 06 июня 2019

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

До:

x---x---P---O <--- master, origin/master

После изменения:

x---x---P---A <--- master
         \
          +-O <--- origin/master

При переводе этого состояния в исходное состояние git обнаруживает, что ваша (локальная) ветвь является одним коммитом за удаленным репо,старая фиксация и прерывается.

Чтобы переписать историю на удаленном репо, вам необходимо принудительно принудительно отправить исходную копию

git push --force origin

После принудительной отправки --force:

x---x---P---A <--- master, origin/master

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

Эта часть может быть неполной, но в некоторых ситуациях нам было достаточно.Те, у кого нет локальных коммитов, могут получить и сбросить свою локальную ветку master на новую origin/master

git fetch
git checkout master
git reset --hard origin/master

Любой, у кого есть локальные изменения, основанные на старой фиксации, может спрятать или зафиксироватьв локальный филиал (временный филиал, из которого они могут выбирать локальные коммиты), прежде чем они получат и сбросят данные.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...