Как ссылаться на удаленные репозитории в псевдониме git?
Как можно ссылаться на псевдоним git для выполнения операции в эквивалентной ветки отслеживания в удаленном репозитории, называемом "origin"? Например, если я нахожусь в ветке "foo" моего локального репо, и я хочу запустить команду, которая обычно по умолчанию относится к моей ветке "origin/foo", как я могу это сделать?
Вот конкретный пример:
Я хочу видеть входящие коммиты из ветки "origin/foo", и я нахожусь в своей локальной ветке "foo". Для этого я бы выполнил git fetch && git log --pretty=oneline --abbrev-commit ..origin/foo
. Таким образом, я создал псевдоним git incoming
следующим образом:
[alias]
incoming = !git fetch && git log --pretty=oneline --abbrev-commit [email protected]{u}
Однако этот псевдоним интерпретируется как git fetch && git log --pretty=oneline --abbrev-commit ..upstream/foo
, где @{u}
является заменой эквивалентной ветки на удаленном пульте. Я хочу выполнить ту же команду, но на эквивалентной ветке на удаленном сервере origin. Как я могу это сделать? Я пробовал @{o}
, но это не работает, и я не могу найти этот синтаксис в любом месте документа git alias. Я получил ответ от комментария @sschuberth в этом ответе, но в противном случае я не нашел много документации.
Обновление
Я нашел близкое решение, но вместо аргумента git использует аргумент bash:
incoming = !git fetch && git log --pretty=oneline --abbrev-commit ..$1
Недостатком является то, что я не могу использовать автозаполнение, предоставляемое git, и оно не сравнивает мою локальную ветвь с удаленным репозиторием origin
.
Ответы
Ответ 1
Отметьте, что, насколько мне известно, Git по-прежнему не поддерживает "треугольный" рабочий процесс, где вы выходите из "восходящего потока" "удалите, примените свои изменения и нажмите на" исходный "пульт (который является вашей вилкой восходящего проекта). Junio, Git, говорит
Note that even in a triangular workflow, <at> {u} should still refer to
the place you integrate with, i.e. your "upstream", not to the place
you push to publish the result of your work.
У вас может быть только одна ветвь удаленного слежения на локальную ветвь, и это либо соответствующая ветвь в upstream
, либо соответствующая ветвь в origin
. @{u}
указывает на то, что настроено как ветвь удаленного отслеживания, независимо от семантически это ваш восходящий проект или разветвленный проект. Смутно, документы Git относятся к @{u}
как к сокращению для "вверх по течению", но на самом деле большинство времени указывает на то, что обычно является "источником".
Короче говоря, для @{u}
работать так, как вам нужно, чтобы изменить ветку удаленного отслеживания для вашей локальной ветки foo
от upstream/foo
до origin/foo
с помощью git branch --set-upstream-to origin/foo
.
Изменить: Если вы приключенческие, возможно, вы также можете использовать вилку Felipe Contreras Git, которая добавляет концепция ветки отслеживания "publish" .