Как проверить, основана ли ветвь, в которой я нахожусь, на фиксации ветки удаленного отслеживания?

Я пытаюсь выяснить, могу ли я вытащить.

Если моя ветка основана на удаленной ветке, то у него есть удаленная ветка отслеживания, поэтому я могу тянуть.

Если моя ветвь основана на коммите, у него нет удаленной ветви отслеживания, поэтому тянуть не удастся.

Что мне удалось найти, так это то, что при использовании команды git branch -vv:

  1. Если есть дистанционное отслеживание, оно будет показано в квадратных скобках. Пример: * origin/before-yo b0b97cf [remotes/origin/before-yo] Move to subfolder
  2. Если ветвь основана на коммите, удаленной ссылки не будет. Пример: * 2fbe2ab473fe8f7aea2a36642aea1dc7d36add51 2fbe2ab Advance counter

Есть ли лучший способ понять, есть ли удаленная ветвь отслеживания, связанная с моей текущей рабочей веткой?

Кроме того, может git branch -vv не работает в некоторых случаях?

Благодарю.

1 ответ

Вот скрипт, который показывает, что вы действительно хотите: после git fetch, он показывает разницу между локальной и удаленной ветками, поэтому вы будете знать, что вам нужно сделать (pull, push, rebase, так далее.). Поместите каталог этого где-нибудь в вашем ПУТИ, и вы можете использовать его как git fetch-log,

#!/bin/sh
# git-fetch-log: Ultimate git fetch-log
#
# It shows the diferences of `local...remote` if both side exists and there
# are differences. Useful to find out what you have to do: `merge`, `rebase`,
# `push`, etc. The arguments passed to log.
#
# Place it somewhere on Your `$PATH` and execute by the `git fetch-log`
# command.
#
#                               EXAMPLE OUTPUT
# ============================================================================
#
# ==== branch [behind 1]
#
# > commit 652b883 (origin/branch)
# | Author: BimbaLaszlo <bimbalaszlo@gmail.com>
# | Date:   2016-03-10 09:11:11 +0100
# |
# |     Commit on remote
# |
# o commit 2304667 (branch)
#   Author: BimbaLaszlo <bimbalaszlo@gmail.com>
#   Date:   2015-08-28 13:21:13 +0200
#
#       Commit on local
#
# ==== master [ahead 1]
#
# < commit 280ccf8 (master)
# | Author: BimbaLaszlo <bimbalaszlo@gmail.com>
# | Date:   2016-03-25 21:42:55 +0100
# |
# |     Commit on local
# |
# o commit 2369465 (origin/master, origin/HEAD)
#   Author: BimbaLaszlo <bimbalaszlo@gmail.com>
#   Date:   2016-03-10 09:02:52 +0100
#
#       Commit on remote
#
# ==== test [ahead 1, behind 1]
#
# < commit 83a3161 (test)
# | Author: BimbaLaszlo <bimbalaszlo@gmail.com>
# | Date:   2016-03-25 22:50:00 +0100
# |
# |     Diverged from remote
# |
# | > commit 4aafec7 (origin/test)
# |/  Author: BimbaLaszlo <bimbalaszlo@gmail.com>
# |   Date:   2016-03-14 10:34:28 +0100
# |
# |       Pushed remote
# |
# o commit 0fccef3
#   Author: BimbaLaszlo <bimbalaszlo@gmail.com>
#   Date:   2015-09-03 10:33:39 +0200
#
#       Last common commit

  fmt='ref=%(refname:short); up=%(upstream:short); t=%(upstream:track); ts=%(upstream:trackshort);'
  git for-each-ref --shell --format="$fmt" refs/heads | \
  while read entry; do
    eval "$entry"
    if test "z$ts" != 'z' && test "z$ts" != 'z='; then
      echo -e "\n==== $ref $t\n"
      git --no-pager log --graph --left-right --decorate --abbrev-commit --date-order --boundary $@ $ref...$up
    fi
  done

https://gitlab.com/bimlas/home/blob/3fb207cdfe57593a78abe30150a3bc40b242e26a/linux/home/.gitconfig_files/custom_commands/git-fetch-log

Другие вопросы по тегам