2016-08-23 3 views
8

Я всегда слышу, что это что-то страшное и что-то, чего я никогда не должен делать. Например, вот как диалог тянуть выглядит в SourceTree:Что произойдет, если я переустановить после нажатия?

enter image description here

Так мне любопытно, что произойдет, и как плохо было бы, если бы я толкнул изменения, а затем перебазировались и снова толкнул их? И как исправить репозиторий, если я сломаю его таким образом?

+0

Хорошей новостью является то, что ничего не потеряно. Вы бы просто создали новую ветвь с большим количеством дублирования с существующей, и бесполезные хлопоты для тех, кто недавно вытащил из репозитория. – Thilo

+2

Снятие фиксации производит другую фиксацию, которая имеет тот же контент, что и исходный, но другой идентификатор. Учитывая, что исходный коммит был нажат, и вы принудительно нажимаете новый коммит, другие разработчики, которые уже потянули ваш первоначальный фиксаж, теперь будут иметь дубликаты (такие же изменения в файлах, но разные идентификаторы). Это приводит к путанице. – axiac

ответ

7

Ничего не случится, но ваш следующий толчок не будет принят.

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

Все плохо, если у вас больше людей, использующих это репо. История перезаписи может стать причиной хаоса для других, кто потянет за собой новые изменения с удаленного компьютера. Особенно, если у них нет хорошего знания git. Могут быть разные вещи, которые могут произойти для того, чтобы человек перетягивал перезаписанную удаленную ветвь в зависимости от состояния своего локального репозитория.

Итак, если кто-то будет работать над функцией X, и вы изменили код, на котором он основывал свои изменения, он мог бы, по крайней мере, расстроиться, чтобы рассердиться, в зависимости от того, сколько его работы вы устарели.

+1

Хорошей новостью является то, что другой парень все еще может основывать свои изменения на ветке, когда он ее видел (ничего не будет потеряно в их местном репо), и даже оттолкнет это назад. И один момент, кто-то должен объединить все вместе (и это, вероятно, должно быть тем, кого насильно толкнули). – Thilo

+2

@Thilo Да, но вам все еще нужно как минимум 1 человек в команде, который знает, как GIT. В противном случае я могу представить, что обвиняю GIT в том, что вы едите код, ломаете проект, голод в мире и т. Д. – Mateusz

+1

Да, если кто-то (я бы сказал, все) понял, как работает git :-) Для тех, кто этого не делает, '--force' и прислушайтесь к предупреждениям на коробке. – Thilo

1

В сценарии, который вы указываете в SourceTree, SourceTree восстанавливает локальные коммиты, которые не были нажаты поверх изменений, которые вы извлекаете из удаленного.

Если вы уже внесли изменения перед использованием опции THAT, эти изменения не будут переустановлены, поскольку они уже находятся на пульте дистанционного управления.

Единственное исключение может быть, если у вас несколько пультов дистанционного управления, и нажали изменения на один пульт, затем выполните pull/rebase от другого - это может вызвать серьезные проблемы.

Следует ли вам переустанавливать или нет во время вытаскивания, является предметом обсуждения. Я не рекомендую это, но он в целом безопасен. https://developer.atlassian.com/blog/2014/12/pull-request-merge-strategies-the-great-debate/

Смежные вопросы