Pull, rebase, push, одной командой (или несколькими) - PullRequest
19 голосов
/ 26 сентября 2011

При использовании Git я часто обнаруживаю, что при работе в master я делаю следующее:

# work work work...
$ git checkout -b temp
$ git commit -a -m 'more work done'
$ git checkout master
$ git pull origin master
# turns out master was updated since my previous pull
$ git checkout temp
# I don't want a merge commit for a simple bugfix
$ git rebase master
$ git checkout master
$ git merge temp
$ git push origin master
$ git branch -d temp

... и я устаю от этогоЕсть ли способ сделать этот танец без всех проверок и желательно без (вручную) создания временной ветки?

Ответы [ 2 ]

24 голосов
/ 26 сентября 2011

Если вы не возражаете против создания ветки с именем temp, вы можете просто сделать следующее для master:

git commit -a -m 'more work done'
git fetch origin
git rebase origin/master

... или эквивалентно:

git commit -a -m 'more work done'
git pull --rebase origin master

Если вы хотите сохранить ветвь temp, вы все равно можете сделать это немного короче, не проверяя master просто для выполнения pull - вам нужно только fetch и затем выполнить ребазинг Ваш филиал на origin/master:

# work work work...
$ git checkout -b temp
$ git commit -a -m 'more work done'
$ git fetch origin
# It looks like origin/master was updated, so:
$ git rebase origin/master
# Then when you finally want to merge:
$ git checkout master
$ git merge temp
$ git push origin master
$ git branch -d temp

Ответ Сехе напоминает мне, что вы можете заменить:

$ git fetch origin
$ git rebase origin/master

... с:

$ git pull --rebase origin master

... что эквивалентно * . Разница в том, что когда вы запускаете git fetch origin, все ваши ветви удаленного отслеживания для origin будут обновляться, тогда как когда вы извлекаете конкретную ветку из origin, ни одна из них не является - это просто временный ref FETCH_HEAD что обновлено. Я лично предпочитаю запускать одну дополнительную команду (git fetch origin) и видеть все удаленные ветви, которые изменились в выводе.

9 голосов
/ 26 сентября 2011

Вы можете как минимум оптимизировать перебазирование: git pull --rebase

Я не совсем уверен, как вам нравятся вещи, но мне нравится мой рабочий процесс вроде этого:

git checkout -b temp
git commit -a -m 'more work done'
git pull --rebase origin master

Таким образом, я сосредоточусь на ветке под рукой.

Тогда позже я делаю

git checkout master
git pull origin master
git merge temp

и т.д.

...