Как я могу сказать, на какой удаленной "родительской" ветке основана моя ветка?

У меня есть сценарий, в котором есть несколько удаленных веток отслеживания в моем локальном репозитории, с которыми я должен синхронизироваться. Наша модель рабочего процесса:

  • сделать ветку локально, основываясь на желаемой ветке удаленного отслеживания
  • внести наши изменения
  • построить / тест / исправление
  • совершить
  • вернуться к удаленному серверу

Я заметил, что "git status" не показывает мне, на какой ветке основана моя локальная ветка, если что-то не изменилось; то есть незафиксированные локальные изменения или недавняя выборка ставят мою локальную ветвь позади. Есть ли какой-нибудь способ узнать, на какой ветви основан мой локальный филиал, без необходимости что-либо менять? Что-то вроде "git status -showparentbranch" или какая-то другая команда, которая показала бы это. Иногда я сталкиваюсь с этой потребностью, но пока не знаю, как ее удовлетворить.

6 ответов

Попробуй это:

git log --graph --decorate

Git не отслеживает, через какие ветви был сделан коммит. Там нет никакого способа, чтобы сказать. Если коммиты произошли в вашем репо, то вы можете проверить рефлог, но это все. Взгляните на объяснение DAG в книге Pro Git, а также читайте о reflog там.

Вы также можете визуализировать историю лучше с gitk --all или же git log --graph --decorate

Надеюсь это поможет.

git branch -vv будут:

  • перечислите все ваши местные филиалы
  • отобразить имя удаленной ветви рядом с каждой локальной веткой
  • выделить активное местное отделение

... из этого вы сможете определить удаленную ветвь текущей активной ветки и многое другое.

Если у вас много местных отделений, список может быть очень длинным. использование git branch -vv | grep SOMEWORD ограничить вывод только ветками, содержащими SOMEWORD. Если вы можете придумать слово, уникальное для вашей ветви, вы получите лучший фильтр (только один результат).

Вы также получите дополнительные данные в выводе, а именно номер (SHA1) и сообщение о последнем коммите. Фильтр grep будет применяться к ним. Я не мог найти способ исключить это.

Из документации ветки Git:

-v

-vv

--подробный

В режиме списка покажите sha1 и передайте строку темы для каждого заголовка вместе с отношением к ветке upstream (если есть). Если задано дважды, выведите также имя вышестоящей ветви (см. Также git remote show).

(Исходя из вашего комментария, да, кажется, что "правильный" вопрос будет касаться "удаленной" ветви, а не "родительской" ветви. Но это я тоже искал!:))

Вы также можете попробовать это:

git rev-parse --abbrev-ref --symbolic-full-name @{u}

И используя этот псевдоним в вашем файле.gitconfig:

[alias]
    showparentbranch = rev-parse --abbrev-ref --symbolic-full-name @{u}

Вы могли бы тогда просто позвонить:

git showparentbranch

Протестировано на git версии 2.10.2.windows.1

Есть несколько способов проверить это. У меня есть бесплатный способ получить этот результат.

  1. используйте gitkraken(платный за частный репозиторий!), он предоставит вам прекрасный способ увидеть дерево ваших веток и коммитов. прокручивая вниз, вы попадете в корень родительской ветви.

  2. если вы используете битбакет, они предоставляют представление в Интернете, чтобы увидеть все ваши коммиты для всех веток (выбрав все ветки из раскрывающегося списка).

  3. Бесплатный способ, через git commnad.

    git log  --graph --decorate --oneline --all
    

    Commnad Expaination

    git log просмотреть журнал.

    --graph просматривать журнал как график.

    - украсить просмотр журнала в красочном режиме.

    --oneline просмотреть журнал, вывести только одну строку в коммитах.

    - просмотреть журнал, все ветки. (важно решить эту тему)

Вот команда, чтобы увидеть родительскую ветку вашей текущей ветки

      git show-branch -a | grep '\*' | grep -v `git rev-parse --abbrev-ref HEAD` | head -n1 | sed 's/.*\[\(.*\)\].*/\1/' | sed 's/[\^~].*//'
Другие вопросы по тегам