Skip to content

Instantly share code, notes, and snippets.

@DenisVerkhoturov
Created April 24, 2018 09:47
Show Gist options
  • Save DenisVerkhoturov/97d9271152438b8cbd45e4a39012f75e to your computer and use it in GitHub Desktop.
Save DenisVerkhoturov/97d9271152438b8cbd45e4a39012f75e to your computer and use it in GitHub Desktop.

При начале работы обязательно выполняем:

git pull

А в конце работы обязательно выполняем:

git push

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

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

  • Работаем с кодом как обычно. Пилим свою функциональность, коммитим какие-то законченные по смыслу этапы. В общем, тут все как обычно.
  • Когда функциональность закончена, спокойно выполняем команду:
git push
  • Если удалось запушить, значит никаких изменений никто до тебя внести не успел. Твоя работа тут закончена, можно пилить следующую фичу.
  • Если в ответ на команду ты видишь такое:
git push

To git@github.com:USER_NAME/REPOCITORY_NAME.git
 ! [rejected]        BRANCH_NAME -> BRANCH_NAME (fetch first)
error: failed to push some refs to 'git@github.com:USER_NAME/REPOCITORY_NAME.git'
hint: Updates were rejected because the remote contains work that you do
hint: not have locally. This is usually caused by another repository pushing
hint: to the same ref. You may want to first integrate the remote changes
hint: (e.g., 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.

Значит твой товарищь по воркфлоу успел внести изменения, которых у тебя еще нет. Нужно их получить. И вот тут ключевой момент. Выполняем команду:

git pull --rebase

или тоже самое, но короче:

git pull -r

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

git add CONFLICT_FILE_NAME

Затем выполняем:

git rebase --continue

Если снова появились конфликты, продолжаем решать их до бавлять и продолжать ребейс. В конечном итоге, при очередном выполнении команды продолжения ребейс, накатится вся история. И можно выполнить:

git push
  • Вот и все.

История чистая. Никаких git push --force. По возможности стоит чаще делать этот push. Чтобы по максимому пользоваться приемуществом быстрого досутпа к коду написанному товаризами по воркфлоу.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment