Какую информацию я могу получить, когда «git branch» ничего не возвращает - PullRequest
2 голосов
/ 20 февраля 2020

После git clone была построена ветка. Когда я изменил каталоги на вершину дерева и выполнил git ветку , ничего не было возвращено.

# git branch
* (no branch)

Посмотрев, какую историю я смог найти, я увидел следующее:

# git clone <repo>
# git checkout -f f4295f4c9e3226d50af3bba48f1a82cdde16ee7a
# get rev-list --no-walk f4295f4c9e3226d50af3bba48f1a82cdde16ee7a

Если бы мне не удалось найти вышеуказанную информацию, какие git команды можно было бы использовать для отслеживания имени ветви или даже что га sh дерево было проверено для сборки?

Ответы [ 2 ]

1 голос
/ 20 февраля 2020

Когда я [бегал] git ветвь , ничего не возвращалось.

# git branch
* (no branch)

Это не ничего , точно. Тем не менее, современная версия Git будет печатать, например:

* (HEAD detached at f4295f4c)

[получается, что это произошло в результате]

# git checkout -f f4295f4c9e3226d50af3bba48f1a82cdde16ee7a

Проверка указанного c commit by ha sh ID создает то, что Git называет detached HEAD . Это не единственный способ попасть в это состояние, но это распространенный способ. Другим распространенным является проверка имени тега , например:

$ git checkout v2.21.0
[messages]
Note: switching to 'v2.21.0'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.
[snip]

$ git branch
* (HEAD detached at v2.21.0)

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

Там вполне может быть нет имени ветви. Это имеет место при использовании необработанного идентификатора ha sh и при использовании имени тега, как показано выше. В Git коммиты не зависят от имен ветвей ; для фиксации не требуется быть в любой ветви, и любая фиксация может быть в много ветвей одновременно. Не предполагайте, что для любого данного коммита существует одно имя ветки.

(В отличие от, например, Mercurial, где для любого данного коммита есть ровно одно имя ветки. коммит находится на этой ветви навсегда, или пока он не будет удален, в зависимости от того, что произойдет раньше. Ветви в Mercurial: solid. В Git коммиты - это навсегда сплошные, но содержащие их названия ветвей меняются со временем . Ветви текучие, а не solid.)

... или даже что га sh дерево было проверено для сборки?

Современный Git показывает сокращенный идентификатор ha sh в выводе git branch, как показано выше. Во всех версиях Git вы всегда можете получить текущий ha sh ID текущего коммита, используя git rev-parse HEAD:

$ git checkout master
[messages snipped]
$ git rev-parse HEAD
c7a62075917b3340f908093f63f1161c44ed1475

Если есть текущая ветвь, вы можете найти ее, используя git symbolic-ref:

$ git symbolic-ref HEAD
refs/heads/master

Когда HEAD отсоединен, как при извлечении указанного c коммита по ha sh ID или имени тега, symbolic-ref команда завершается с ошибкой , указывая на то, что вы вообще не находитесь на ветке.

1 голос
/ 20 февраля 2020

Локальной ветки у вас нет, что связано с тем, что сборка произошла, как вы упомянули в своем вопросе.

git branch -r

показывает, какие ветки находятся в удаленном хранилище. Вы также можете запустить

git fetch

, чтобы получить ветви.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...