как узнать в какой ветке находишься git
Работа с ветками в GIT
Чтобы исправить баг или сделать новую фитчу в проекте, обычно создают новую ветку. Зачем? Чтобы избежать путаницы. Если бы все делалось в основной ветке, в проекте было бы сложно разобраться, особенно если над ним одновременно работает много людей.
Поэтому только по окончании работы над задачей изменения в ветке сливают в основную ветку master.
Создание ветки
Чтобы создать новую ветку testing локально, выполним команду:
На момент выполнения команды вы находились в какой-то ветке, допустим в master. Состояние этой ветки будет скопировано в ветку testing, и в testing можно будет редактировать файлы и делать снимки, не трогая пока основную ветку master.
Переключение на ветку
Предыдущая команда создаст ветку, но не переключит нас на нее, мы все еще останемся работать в старой ветке. Чтобы перейти на ветку testing и начать работать в ней, выполним команду:
Имейте в виду, что GIT не позволит перейти на другую ветку, если в текущей ветке – в которой мы находимся – есть изменения, которые не зафиксированы (commit) либо не спрятаны (stash). Это нормально, ведь при смене ветке в текущем каталоге сменятся файлы, и git-у надо знать, как быть с текущими изменениями.
Создание и переключение единой командой
Чтобы не выполнять предыдущие команды по очереди, можно написать их одной строкой:
Эта команда создаст ветку testing и сразу переключит нас на нее. Обычно именно это и требуется сделать.
Как переключиться на чью-то ветку из удаленного репозитория
Важно понимать, что GIT не позволит вам работать над чужой веткой. Принцип такой – вы создаете локальную копию чужой ветки, и над ней уже работаете.
Но для начала надо обновить локальный репозиторий – скопировать в него все ветки, которые есть в удаленном репозитории:
Теперь можно посмотреть, какие ветки есть в удаленном репозитории:
Допустим, там есть ветка dev1. Переключимся на нее, создав локальную ветку с таким же именем:
Вообще-то можно было написать проще:
Как создать подветку ветки
Обычно мы ответвляемся от основной ветки master, но не всегда. Иногда требуется сделать ответвление от созданной ветки – так сказать, ответвление второго порядка.
Предыдущая команда, с помощью которой мы создавали ветку:
создает ответвление от основной ветки master.
Если нам надо ответвиться не от основной ветки, а от вновь созданной testing, то выполним поочередно команды:
Первая команда переключит нас на ветку testing.
Вторая команда создаст ветку с именем subbranch_of_testing, ответвляющуюся от testing, и переключит нас на нее.
Как понятно из имени, subbranch_of_testing – это подветка ветки testing.
Как посмотреть ветки
Чтобы увидеть все созданные локально ветки, выполним команду:
Появится список веток. Текущая ветка будет выделена звездочкой.
Как переименовать ветку
Иногда оказывается, что первоначально созданное имя ветки не самое лучшее. Его можно изменить.
Локальную
Если еще не выполнена команда push, то достаточно переименовать локальную ветку.
Чтобы переименовать локальную ветку, выполним команду:
Например, переименуем ветку testing в ветку test:
Чтобы переименовать текущую ветку, выполним команду:
Например, текущая ветка у нас subbranch_of_testing. Переименуем ее в subbranch:
Удаленную
Переименовать удаленную ветку (ветку в удаленном репозитории) нельзя. Можно удалить ее и отправить в репозиторий локальную ветку с новым именем:
здесь origin – имя удаленного репозитория (обычно удаленный репозиторий так называется),
old-name – имя ветки локальной ветки,
new-name – новое имя ветки в удаленном репозитории.
Например, надо переименовать ветку testing в test:
Удаление локальной ветки
Чтобы удалить локальную ветку, выполните одну из команд:
Флаги:
-D сокращение для –delete –force удаляет ветку независимо от того, слиты ли ее изменения
-d сокращение для –delete
Например, удалим локальную ветку test:
Вообще-то локальную ветку обычно удаляют после того, как слили ее (выполнили merge) в ветку master, смотрите последний раздел в статье о слиянии веток.
Удаление ветки из удаленного репозитория
Чтобы удалить удаленную ветку, можно использовать две записи.
Либо через двоеточие, как мы уже делали при переименовании ветки:
Например, удалим ветку test из удаленного репозитория origin:
Либо с флагом –delete, так понятнее:
здесь origin – имя удаленного репозитория
Как слить ветки
Обычно сливают некоторую ветку (например, ветку-багфикс) в ветку master. Для этого сначала перейдем в ветку master (в ту ветку, в которую вливаем изменения):
А затем выполним слияние. Допустим, в ветку master надо слить ветку test :
Слияние веток не всегда происходит гладко, иногда требуется разрешить конфликты вручную. Для этого надо отредактировать конфликтые файлы, выполнить их commit.
В этой статье мы рассмотрели работу с ветками GIT и составили небольшую шпаргалку по использованию веток.
Как узнать текущую ветку и элейес репозитория на сервере git?
Есть сервер git, туда я поставил web-интерфейс, и надо прикрутить ctags на файлы, для этого надо обработать каждый push в hook’ах, решил я сделать две ветки на репозитории origin:
Надо теперь как то узнавать элейес репозитория (origin или др.), и ветку, по http такая информация не передается.
проделал я в локальном репе:
после этого я посмотрел файл head:
в .git/HEAD на клиенте: ref: refs/heads/dev
на сервере ref: refs/heads/master
dev была создана после master
но HEAD по сути должен же указывать на последний коммит в дереве изменений? Почему на сервере master?
вот еще выполнил на сервере:
1 ответ 1
предварительное напоминание
в git-е веткой (branch) называется «скользящий» указатель на commit, а не набор commit-ов, как принято в некоторых других системах управления контролем версий.
но HEAD по сути должен же указывать на последний коммит в дереве изменений? Почему на сервере master?
в bare-репозитории файл HEAD ссылается на «ветку по умолчанию», что в первую очередь влияет на результаты клонирования этого репозитория: если при клонировании не указано, на какую ветку следует переключить рабочий каталог (working directory) по окончании клонирования, именно на эту ветку и произойдёт переключение.
Шпаргалка по Git, в которой представлены основные команды
Шпаргалка по основным командам
git add
Команда git add добавляет содержимое рабочей директории в индекс (staging area) для последующего коммита. По умолчанию git commit использует лишь этот индекс, так что вы можете использовать git add для сборки слепка вашего следующего коммита.
git status
Команда git status показывает состояния файлов в рабочей директории и индексе: какие файлы изменены, но не добавлены в индекс; какие ожидают коммита в индексе. Вдобавок к этому выводятся подсказки о том, как изменить состояние файлов.
git diff
git difftool
git commit
git reset
git rm
Команда git rm используется в Git для удаления файлов из индекса и рабочей директории. Она похожа на git add с тем лишь исключением, что она удаляет, а не добавляет файлы для следующего коммита.
git mv
Команда git mv — это всего лишь удобный способ переместить файл, а затем выполнить git add для нового файла и git rm для старого.
git clean
Команда git clean используется для удаления мусора из рабочей директории. Это могут быть результаты сборки проекта или файлы конфликтов слияний.
Шпаргалка по ветвлению и слиянию
git branch
Команда git branch — это своего рода “менеджер веток”. Она умеет перечислять ваши ветки, создавать новые, удалять и переименовывать их.
git checkout
Команда git checkout используется для переключения веток и выгрузки их содержимого в рабочую директорию.
git merge
Команда git merge используется для слияния одной или нескольких веток в текущую. Затем она устанавливает указатель текущей ветки на результирующий коммит.
git mergetool
Команда git mergetool просто вызывает внешнюю программу слияний, в случае если у вас возникли проблемы слияния.
git log
Команда git log используется для просмотра истории коммитов, начиная с самого свежего и уходя к истокам проекта. По умолчанию, она показывает лишь историю текущей ветки, но может быть настроена на вывод истории других, даже нескольких сразу, веток. Также её можно использовать для просмотра различий между ветками на уровне коммитов.
git stash
Команда git stash используется для временного сохранения всех незакоммиченных изменений для очистки рабочей директории без необходимости коммитить незавершённую работу в новую ветку.
git tag
Команда git tag используется для задания постоянной метки на какой-либо момент в истории проекта. Обычно она используется для релизов.
Шпаргалка по совместной работе и обновлению проектов
Не так уж много команд в Git требуют сетевого подключения для своей работы, практически все команды оперируют с локальной копией проекта. Когда вы готовы поделиться своими наработками, всего несколько команд помогут вам работать с удалёнными репозиториями.
git fetch
Команда git fetch связывается с удалённым репозиторием и забирает из него все изменения, которых у вас пока нет и сохраняет их локально.
git pull
git push
Команда git push используется для установления связи с удалённым репозиторием, вычисления локальных изменений отсутствующих в нём, и собственно их передачи в вышеупомянутый репозиторий. Этой команде нужно право на запись в репозиторий, поэтому она использует аутентификацию.
git remote
Команда git remote служит для управления списком удалённых репозиториев. Она позволяет сохранять длинные URL репозиториев в виде понятных коротких строк, например «origin», так что вам не придётся забивать голову всякой ерундой и набирать её каждый раз для связи с сервером. Вы можете использовать несколько удалённых репозиториев для работы и git remote поможет добавлять, изменять и удалять их.
git archive
Команда git archive используется для упаковки в архив указанных коммитов или всего репозитория.
git submodule
Шпаргалка по осмотру и сравнению
git show
Команда git show отображает объект в простом и человекопонятном виде. Обычно она используется для просмотра информации о метке или коммите.
git shortlog
git describe
Команда git describe принимает на вход что угодно, что можно трактовать как коммит (ветку, тег) и выводит более-менее человекочитаемую строку, которая не изменится в будущем для данного коммита. Это может быть использовано как более удобная, но по-прежнему уникальная, замена SHA-1.
Шпаргалка по отладке
В Git есть несколько команд, используемых для нахождения проблем в коде. Это команды для поиска места в истории, где проблема впервые проявилась и собственно виновника этой проблемы.
git bisect
Команда git bisect — это чрезвычайно полезная утилита для поиска коммита в котором впервые проявился баг или проблема с помощью автоматического бинарного поиска.
git blame
Команда git blame выводит перед каждой строкой файла SHA-1 коммита, последний раз менявшего эту строку и автора этого коммита. Это помогает в поисках человека, которому нужно задавать вопросы о проблемном куске кода.
git grep
Команда git grep используется для поиска любой строки или регулярного выражения в любом из файлов вашего проекта, даже в более ранних его версиях.
Если вы только начинаете работать с Git, или переходите на Git с другой СКВ, то такая шпаргалка может вам очень пригодиться.
Как получить текущее название ветки в Git?
Я из фона Subversion и, когда у меня была ветка, я знал, над чем я работал, с «Эти рабочие файлы указывают на эту ветку».
Но с Git Я не уверен, когда редактирую файл в NetBeans или Notepad ++, независимо от того, привязан ли он к мастеру или другой ветке.
Нет проблем с git в bash, это говорит мне, что я делаю.
ОТВЕТЫ
Ответ 1
Если вы хотите получить только название ветки, в которой вы находитесь, вы можете сделать:
Ответ 2
Чтобы отобразить текущую ветку, в которой вы находитесь, без других перечисленных веток, вы можете сделать следующее:
Ответ 3
Чтобы отобразить только название ветки в Git v1.8 и более поздних версиях (спасибо Грегу за указание на это):
В Git v1.7 + вы также можете:
Оба должны указывать одно и то же имя ветки, если вы находитесь на ветке. Если вы находитесь в отдельной голове, ответы различаются.
На более раннем клиенте это работает:
— Дариен 26. Март 2014
Ответ 4
Для моей собственной справки (но это может быть полезно для других) я сделал обзор большинства (основных командных строк) методов, упомянутых в этом потоке, каждый из которых применяется к нескольким случаям использования: HEAD is (указывает на):
(К вашему сведению, это было сделано с помощью git версии 1.8.3.1)
Ответ 5
Еще одна альтернатива:
Ответ 6
Хорошо достаточно просто, я получил его в одном лайнере (bash)
(кредит: ограниченное искупление)
И пока я там, один лайнер для получения удаленной ветки отслеживания (если есть)
Ответ 7
Вы можете просто ввести командную строку (консоль) в Linux в каталоге репозитория:
и вы увидите текст, среди которого что-то похожее на:
Ответ 8
Я использую это в скриптах, которые нуждаются в текущем имени ветки. Он покажет вам текущую короткую символическую ссылку на HEAD, которая будет вашим текущим именем ветки.
Ответ 9
будет отображаться только название ветки
Ответ 10
Найденное решение командной строки той же длины, что и Oliver Refalo, используя хороший ol awk:
awk читает, что «делать вещи в <> в строках, соответствующих регулярному выражению». По умолчанию он принимает поля с разделителями пробелов, поэтому вы печатаете второй. Если вы можете предположить, что только строка с вашей ветвью имеет *, вы можете сбросить ^. Ах, bash гольф!
Ответ 11
git branch показывает только текущее имя ветки.
Хотя ветка git покажет вам все ветки и выделит текущую звездочку звездочкой, она может быть слишком громоздкой при работе с большим количеством веток.
Чтобы показать только ту ветку, в которой вы находитесь, используйте:
Ответ 12
Ответ 13
Как git-prompt.sh от contrib/ делает (git версия 2.3.0), как определено в __git_ps1 вспомогательной функции
Во-первых, есть особый случай, если обнаружена перебазировка. Git использует неименованный филиал (отдельный HEAD) во время процесса переадресации, чтобы сделать его атомарным, а исходная ветвь сохраняется в другом месте.
Я надеюсь, что это поможет.
Ответ 14
вы можете использовать git bash в рабочем каталоге команда выполняется следующим образом
он расскажет вам, на какой ветке вы находитесь есть много полезных команд, некоторые из которых
— короткая Дайте вывод в коротком формате.
— фарфоровая [=] Дайте результат в формате простого для разбора скриптов. Это похоже на короткий вывод, но будет оставаться стабильным в версиях git и независимо от пользовательской конфигурации. Подробнее см. Ниже.
Параметр версии используется для указания версии формата. Это необязательно и по умолчанию используется формат оригинальной версии v1.
— долго Дайте результат в формате long-format. Это значение по умолчанию.
Ответ 15
Извините, это еще один ответ командной строки, но это то, что я искал, когда нашел этот вопрос, и многие из этих ответов были полезны. Моим решением является следующая функция оболочки bash:
Ответ 16
Со временем у нас может быть действительно длинный список ветвей.
В то время как некоторые из других решений велики, вот что я делаю (упрощенное от ответа Иакова):
работает, но только если есть локальные изменения
Ответ 17
Я рекомендую использовать любую из этих двух команд.
ИЛИ (более многословно)
Ответ 18
Менее шумная версия для статуса git поможет
Ответ 19
В Netbeans убедитесь, что аннотации версий включены (View → Show Versioning Этикетки). Затем вы можете увидеть название ветки рядом с именем проекта.
Ответ 20
Ответ 21
У меня есть простой script, называемый git-cbr (текущая ветвь), которая выводит текущее название ветки.
Я помещаю этот script в пользовательскую папку (
Ответ 22
Откройте терминал (ctrl-alt-t) и введите команды
/.bashrc (для Ubuntu) и добавьте следующее вверху:
Затем вставьте код
в конце того же файла вы вставляли код установки ранее. Это даст вам раскрашенный результат:
Ответ 23
Следующая команда оболочки сообщает ветке, в которой вы находитесь.
Ответ 24
Если вы действительно хотите, чтобы последняя ветвь/тег была выгружена в отдельном состоянии HEAD.
Обновление Это лучше, если у вас есть и не боятся awk.
Ответ 25
также даст название ветки вместе с изменениями.
Ответ 26
Возвращает имя ветки или SHA1, когда на отдельной голове:
Это короткая версия ответа @dmaestro12 и без поддержки тегов.
Ответ 27
Я знаю, что это поздно, но на linux/mac, из терминала вы можете использовать следующее.
Ответ на приведенную выше команду будет выглядеть следующим образом:
Ответ 28
вы также можете использовать переменную GIT_BRANCH, как показано здесь: https://wiki.jenkins-ci.org/display/JENKINS/Git+Plugin
Плагин git устанавливает несколько переменных среды, которые вы можете использовать в своих скриптах:
Ответ 29
Добавьте его в PS1 используя Mac:
Перед запуском команды выше:
После выполнения этой команды:
Ответ 30
Прямая копия результата в картон. Благодаря @olivier-refalo для начала.
Как узнать в какой ветке находишься git
Создание репозиториев
git init [project-name] — создать новый локальный репозиторий с заданным именем.
git clone [url] — загрузить проект и его полную историю изменений.
Работа с изменениями
git status — полный список изменений файлов, ожидающих коммита.
git diff — показать изменения в файлах, которые еще не были добавлены в индекс коммита (staged).
git add [file] — сделать указанный файл готовым для коммита.
git add ‘*.txt’ — добавить только файлы, соответствующие указанному выражению.
git diff HEAD — показать что изменилось с последнего коммита.
git diff HEAD^ — показать что изменилось с предпоследнего коммита.
git diff [branch] — сравнить текущую ветку с заданной.
git reset [file] — убрать файлы из индекса коммита (изменения не теряются).
git commit — записать изменения в репозиторий. для написания сообщения откроется назначенный редактор.
Работа с ветками
git branch — список всех локальных веток в текущей директории.
git branch [branch-name] — создать новую ветку.
git checkout [branch-name] — переключиться на указанную ветку и обновить рабочую директорию.
git checkout [filename] — вернуть файл в первоначальное состояние если он еще не был добавлен в индекс коммита.
git merge [branch] — соединить изменения в текущей ветке с изменениями из заданной.
Работа с файлами
git rm [file] — удалить файл из рабочей директории и добавить в индекс информацию об удалении.
git mv [file-original] [file-renamed] — изменить имя файла и добавить в индекс коммита.
Отслеживание файлов
.gitignore — текстовый файл, в котором задаются правила для исключения файлов из репозитория. Например:
Сохранение фрагментов
git stash — положить во временное хранилище все отслеживаемые файлы.
git stash pop — восстановить последние файлы, положенные во временное хранилище.
git stash list — список всех сохраненных изменений во временном хранилище.
git stash drop — удалить последние файлы, положенные во временное хранилище.
Просмотр истории
git log — список изменения текущей ветки.
git diff [file-branch]..[second-branch] — посмотреть различия между двумя заданными ветками.
git show [commit] — показать метадату и изменения в заданном коммите.
git show [branch]:[file] — посмотреть на файл в другой ветке, не переключаясь на неё.
Отмена коммитов
git reset — убрать изменения из индекса коммита, сами изменения останутся.
git reset [commit/tag] — отменить все коммиты после указанного коммита, изменения будут сохранены локально.
Синхронизация изменений
git fetch [bookmark] — загрузить всю историю с заданного удаленного репозитория.
git merge [bookmark]/[branch] — слить изменения локальной ветки и заданной удаленной.
git push — запушить текущую ветку в удаленную ветку.
git push [remote] [branch] — запушить ветку в указанный репозиторий и удаленную ветку.
git push [bookmark] :[branch] — в удаленном репозитории удалить заданную ветку.
git pull — загрузить историю и изменения удаленной ветки и произвести слияние с текущей веткой.
git pull [remote][branch] — указать конкретную удаленную ветку для слияния.
git remote — посмотреть список доступных удаленных репозиториев.
git remote add [remote][url] — добавить новый удаленный репозиторий.