GIT - Откуда я ветвился?

Я вернулся на старый проект, и я побежал хороший git status чтобы понять, что происходит, и я заметил слишком много веток! Я хочу сделать уборку перед тем, как снова начать работать над этим, но я не уверен, какая ветвь из какой...

EG Является ли "branchA" производным от "development"? "BranchB" происходит от "master" или "branchA"??

Как я могу ответить на примеры вопросов выше?

7 ответов

Решение

На это нет канонического ответа, так как ветви - это просто указатели на определенные коммиты в DAG. Например, master а также foo может указывать на один и тот же коммит; если вы затем создаете ветку из foo, это практически то же самое, что создание ветви из master,

Тем не менее, если вы визуализируете граф фиксации (через gitk или другой графический инструмент истории), вы можете получить общее представление о том, где точки ветвления находятся в графе фиксации, в отличие от того, куда указывают различные указатели ветвей.

git merge-base показывает коммит, который является общим предком двух веток.

Простое использование: git merge-base <branch> <branch> показывает общий коммит двух веток.

Если вы уже находитесь на ветке, вы можете получить коммит, который является точкой, где он разветвляется из другой ветви, скажем, master, как это:

git merge-base --fork-point master

Исполняемый файл командной строки git также имеет возможность отображать рудиментарное дерево ветвления и слияния, используйте параметр --graph для git log. Вы можете сделать всевозможные приятные улучшения с помощью других опций. Примерьте эти на размер:

самый простой: git log --graph

красиво: git log --graph --decorate --simplify-by-decoration --color --oneline --date=local

полный monty: git log --graph --decorate --simplify-by-decoration --color --oneline --date=local --pretty=format:'%C(auto) %h %d %C(reset)%s (%C(голубой)%ad %ae%C(сброс))'

Как уже упоминалось, нет канонического ответа, но git reflog может помочь в некоторых случаях, показывая вашу локальную историю git:

a1b2c3d4 (HEAD -> my_current_working_branch) HEAD@{0}: pull origin master: Merge made by the 'recursive' strategy.
aaaa1111 (origin/my_current_working_branch) HEAD@{1}: commit: Added bar
def123aa (forgotten_branch) HEAD@{2}: checkout: moving from forgotten_branch to my_current_working_branch

В этом случае я вижу, что я разветвился от forgotten_branch к my_current_working_branch, и слились master в.

Он не всегда дает вам информацию, которую вы ищете, но может помочь в определенных ситуациях.

Если вы работаете в Windows или Linux (с графическим интерфейсом), просто установите красивые git-расширения. Они могут прекрасно представить вам ветку / дерево слияний.

http://code.google.com/p/gitextensions/downloads/detail?name=GitExtensions207.zip&can=4&q=

Привет,

Придерживайтесь соглашения об именах и избавьте себя от путаницы.

При создании ветки из master - скажем, для реализации функции электронной почты - вы можете назвать его master_emailfeature, Затем, если вам нужно создать дочернюю ветку из этой ветви для реализации ssl для электронной почты, вы можете назвать ее master_emailfeature_sslandtls,

Это дает понять, какая ветвь была создана из какой, просто взглянув на название ветви.

Вы можете использовать графический просмотрщик дерева, я использую gitg для просмотра веток и различий, хотя большую часть времени я использую командную строку для реальной работы.

Если вы хотите выяснить, из какой удаленной ветки произошла ваша локальная ветвь, эта команда может пролить некоторый свет.

git remote show origin

Прокрутите вниз, пока не увидите "Локальные ветви, настроенные для" git pull ":", а под ними отображается список всех ваших локальных ветвей и каждая из них будет сливаться с удаленной веткой.

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