Как я могу сказать, на какой удаленной "родительской" ветке основана моя ветка?
У меня есть сценарий, в котором есть несколько удаленных веток отслеживания в моем локальном репозитории, с которыми я должен синхронизироваться. Наша модель рабочего процесса:
- сделать ветку локально, основываясь на желаемой ветке удаленного отслеживания
- внести наши изменения
- построить / тест / исправление
- совершить
- вернуться к удаленному серверу
Я заметил, что "git status" не показывает мне, на какой ветке основана моя локальная ветка, если что-то не изменилось; то есть незафиксированные локальные изменения или недавняя выборка ставят мою локальную ветвь позади. Есть ли какой-нибудь способ узнать, на какой ветви основан мой локальный филиал, без необходимости что-либо менять? Что-то вроде "git status -showparentbranch" или какая-то другая команда, которая показала бы это. Иногда я сталкиваюсь с этой потребностью, но пока не знаю, как ее удовлетворить.
6 ответов
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
Есть несколько способов проверить это. У меня есть бесплатный способ получить этот результат.
используйте gitkraken(платный за частный репозиторий!), он предоставит вам прекрасный способ увидеть дерево ваших веток и коммитов. прокручивая вниз, вы попадете в корень родительской ветви.
если вы используете битбакет, они предоставляют представление в Интернете, чтобы увидеть все ваши коммиты для всех веток (выбрав все ветки из раскрывающегося списка).
Бесплатный способ, через 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/[\^~].*//'