Я новичок в Git, поэтому не стесняйтесь относиться ко мне как к новичку.
У нас такой рабочий процесс. У нас есть филиал, по devкоторому я могу связаться origin/dev. Когда мы вносим изменения, мы создаем ответвление от dev:
git checkout -b FixForBug origin / dev
Теперь у меня есть ветка, FixForBugкоторая отслеживает (думаю, это правильное слово) origin/dev. Таким образом, если я сделаю это, git pullэто внесет новые изменения, и origin/devэто здорово. Теперь, когда я закончил исправление, я нажимаю на удаленную ветку с тем же именем.
Сначала я извлекаю любые изменения из origin/devи делаю перебазирование:
git pull --rebase
Затем я отправляю изменения в удаленную ветку с тем же именем:
git push origin FixForBug
Теперь на удаленном сервере есть ветка, и я могу создать запрос на перенос, чтобы это изменение было одобрено и снова слито с веткой dev. Я никогда ничего origin/devсебе не навязываю . Я предполагаю, что это довольно распространенный рабочий процесс.
В первый раз, когда я делаю git push, он отлично работает и создает удаленную ветку. Однако, если я нажимаю второй раз (допустим, во время проверки кода кто-то указывает на проблему), я получаю следующую ошибку:
ошибка: не удалось отправить некоторые ссылки на ' https://github.limeade.info/Limeade/product.git '. Подсказка: обновления были отклонены, потому что вершина вашей текущей ветки находится за подсказкой: ее удаленный аналог. Интегрируйте удаленные изменения (например, подсказку: 'git pull ...') перед повторным нажатием. Подсказка: подробности см. в «Примечании о быстрой перемотке вперед» в «git push --help».
Однако, если я делаю это, git statusон говорит, что я опережаю origin/devна 1 фиксацию (что имеет смысл), и если я следую подсказке и бегу git pull, он говорит, что все обновлено. Я думаю, это потому, что я перехожу в другую ветку, чем моя восходящая ветка. Я могу исправить эту проблему, запустив:
git push -f origin FixForBug
В этом случае, он будет толкать изменения в удаленной ветви, говоря (принудительное обновление) и все , что появляется , чтобы быть хорошим на удаленном филиале.
Мои вопросы:
Почему -fтребуется в этом сценарии? Обычно, когда вы что- то принуждаете , это потому, что вы делаете что-то неправильно или, по крайней мере, против стандартной практики. Могу ли я сделать это, или это что-то испортит в удаленной ветке или создаст проблемы для тех, кому в конечном итоге придется объединить мои материалы с разработчиком?
git pull origin FixForBugпрежде чем я на это нажму ? Хорошо, это имеет смысл. Не стесняйтесь добавлять в качестве ответа!
