Короткий відповідь
Поки ви здійснюєте швидке злиття вперед , тоді ви можете просто використовувати
git fetch <remote> <sourceBranch>:<destinationBranch>
Приклади:
# Merge local branch foo into local branch master,
# without having to checkout master first.
# Here `.` means to use the local repository as the "remote":
git fetch . foo:master
# Merge remote branch origin/foo into local branch foo,
# without having to checkout foo first:
git fetch origin foo:foo
Хоча відповідь Бурштину також буде працювати у випадках швидкого перемотування вперед, git fetch
натомість використання цього способу трохи безпечніше, ніж просто переміщення посилань на гілку, оскільки git fetch
автоматично запобігає випадковому не швидкому переправленню до тих пір, поки ви не використовуєте +
в респект.
Довга відповідь
Ви не можете об'єднати гілку B у гілку A, не спершу перевіривши A, якщо це призведе до неперехідного злиття вперед. Це тому, що потрібна робоча копія для вирішення будь-яких потенційних конфліктів.
Однак у випадку швидкого злиття вперед це можливо , тому що такі злиття ніколи не можуть спричинити конфлікти, за визначенням. Для цього, не спершу перевіряючи гілку, ви можете скористатись git fetch
refspec.
Ось приклад оновлення master
(заборона нескоростих змін вперед), якщо ви feature
перевірили іншу гілку :
git fetch upstream master:master
Цей випадок використання настільки поширений, що ви, ймовірно, захочете зробити його псевдонім у вашому файлі конфігурації git, як цей:
[alias]
sync = !sh -c 'git checkout --quiet HEAD; git fetch upstream master:master; git checkout --quiet -'
Цей псевдонім робить наступне:
git checkout HEAD
: це переводить вашу робочу копію в стан відокремленої головки. Це корисно, якщо ви хочете оновити, master
поки ви випадково перевірили його. Я думаю, що це було потрібно робити, тому що в іншому випадку посилання на галузь master
не рухатиметься, але я не пам'ятаю, чи це справді прямо вгорі моєї голови.
git fetch upstream master:master
: це швидко пересилає вашого місцевого жителя master
на те саме місце, де і upstream/master
.
git checkout -
перевіряє вашу попередньо зареєстровану гілку (саме це -
робить у цьому випадку).
Синтаксис git fetch
для (не) швидких переходів вперед
Якщо ви хочете, щоб fetch
команда вийшла з ладу, якщо оновлення не швидко переходить вперед, тоді ви просто використовуєте рефлекс форми
git fetch <remote> <remoteBranch>:<localBranch>
Якщо ви хочете дозволити оновлення, які не швидко перемотають вперед, тоді ви додасте a +
на передню частину refspec:
git fetch <remote> +<remoteBranch>:<localBranch>
Зауважте, що ви можете передавати локальне репо як "віддалений" параметр, використовуючи .
:
git fetch . <sourceBranch>:<destinationBranch>
Документація
З git fetch
документації, яка пояснює цей синтаксис (моє наголос):
<refspec>
Формат <refspec>
параметра - необов'язковий плюс +
, за ним - джерело ref <src>
, за ним - двокрапка :
, а потім - номер призначення <dst>
.
Віддалене відбиття, яке відповідає <src>
, отримується, і якщо <dst>
це не порожній рядок, локальний коефіцієнт, який відповідає, швидко передається за допомогою<src>
. Якщо використовується необов'язковий плюс+
, локальна посилання оновлюється, навіть якщо це не призводить до швидкого оновлення вперед.
Дивись також
Git чек і злиття, не торкаючись робочого дерева
Об’єднання без зміни робочого каталогу