Как ссылаться на удаленные репозитории в псевдониме 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" .