2014-10-31 1 views
1

Если у меня есть настройка ветки, и я удаленно отдал ее, чтобы другие могли делиться и работать. Есть ли команда git, чтобы проверить, находится ли моя ветка в HEAD? Я предполагаю, что кто-то совершил и нажал изменения на свою машину на пульт, который я еще не снял, это значит, что моя локальная ветка не находится в HEAD.Поиск, если ветка находится в голове в git

Я вижу, что я могу сделать

git diff testbr origin/testbr 

Если это возвращает что-то, это означает, что местный testbr не в HEAD. или я могу сделать, если

git fetch returns empty update 

или

git log HEAD..<remoteBr> --oneline 

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

+0

Сторона примечания: обычные рабочие процессы git предполагают, что все просто тянут прежде чем здравый смысл подскажет - перед каждым локальным изменением, прежде чем нажимать. Таким образом, локальная активная ветка всегда обновляется. – Basilevs

+0

Спасибо. В этом есть смысл. Но я делаю это из некоторого кода автоматизации. – user3606175

+0

Вы не можете автоматически потянуть? – Basilevs

ответ

1

Если вы не хотите получать, вам необходимо проанализировать идентификатор фиксации от git ls-remote. Например, если вы

git ls-remote origin testbr 

вы можете увидеть

728f270f6850706a3ac1990da4c44589eb6d38f7  refs/heads/testbr 

И вы можете использовать cut в оболочке, чтобы получить первое поле.

Чтобы получить коммит идентификатора местного отделения вы можете использовать git rev-parse как

git rev-parse testbr 

Так в скрипте вы просто сравните коммит идентификаторы:

[ `git ls-remote origin testbr | cut -f1` == `git rev-parse testbr` ] 

Если вы готовы принести во-первых, тогда вы можете просто сделать

[ `git rev-parse testbr` == `git rev-parse origin/testbr` ] 
+0

Спасибо. Я искал больше истинного/ложного ответа. Но похоже, что этого не существует. Поэтому я буду использовать git log HEAD вместе с git fetch. – user3606175

Смежные вопросы