2014-12-28 2 views
1

Я часто бываю в этой ситуации, когда я разветвлял репозиторий с открытым исходным кодом под olivierlacan/ossreponame.Как вы можете проверить, что ваша локальная история git соответствует удаленным

Я всегда устанавливал свое собственное раздвоенное репо как пульт origin, а канонический репозиторий - как удаленный upstream.

Регулярно, я запускаю git pull --rebase upstream origin, чтобы обновить локальную копию и направить ее на olivierlacan/ossreponame на GitHub, если необходимо.

Однако иногда я делал некоторые экспериментальные изменения на главной ветке внутри моей локальной вилки (я знаю, это плохо, я должен использовать ветви, но это происходит). В сомнении, я часто проверяю git log на недавнюю фиксацию, созданную мной, а затем откатываю эти изменения. Но у меня всегда есть затяжное чувство, что я, возможно, подкрадываю свои бродячие коммиты, переустанавливая это.

Есть ли простой способ сравнить мою историю журнала git с одной на upstream/master, чтобы быть уверенным, что они не расходятся. Пожалуйста, не стесняйтесь говорить мне, если это ужасная идея.

ответ

2

Похоже, вам нужно узнать о git fetch. git pull делает 2 вещи: он извлекает изменения с удаленного устройства в локальную ветку удаленного отслеживания или FETCH_HEAD, а затем объединяет или переустанавливает удаленные изменения в локальную ветвь. Пока вы не получите, вы не можете делать никаких различий.

Что вы должны сделать, это следующее:

git fetch origin master 
git log origin/master..master 

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

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

git log origin/master...master 

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

git log origin/master....master --boundary 

Наконец, когда вы готовы принести в отдаленных изменений, если таковые имеются, просто сделать

git rebase origin/master master 

Второй аргумент, master, необходим, только если вы не находитесь на главной ветке.

+0

Я думаю, вы неправильно поняли мой вопрос. В то время как различные журналы являются интересными, он пока не решает используемый прецедент: несоответствие между локальным мастером и удаленным мастером. То, что мне нужно увидеть, не связано с отсутствием «origin/master» на локальном хозяине, но наоборот. См. Мой ответ на решение, которое я нашел, используя 'git cherry'. –

+0

@OlivierLacan Первая команда, которую я дал, «git log origin/master..master» сообщит вам, что вы совершаете коммиты на своем локальном компьютере, которые не находятся ни на пульте дистанционного управления. –

1

В то время как Джозеф К. Штраус представил интересный путь с git log изменений между origin/master и местным master, есть простая команда мерзавца, которая покрывает мое использование полностью: git cherry.

Его руководство определяет его как:

GIT-вишневый - Найти совершает еще быть применены к вверх по течению

Я собираюсь изменить название моего вопроса, чтобы быть более точным, так как получается мой вопрос был плохо сформулирован и уже был дан ответ в Viewing Unpushed Git Commits.

Запуск git cherry -v отображает любые локальные фиксации на master, которые еще не были нажаты на origin/master. Технически это не характерно для освоения, поэтому любая ветка с отслеживанием удаленных филиалов в верхнем течении будет работать.

Вы, конечно, можете вручную указать, какие отрасли вы хотите сравнить:

git cherry -v origin/master mybranch 

Я рекомендую прочитать git help cherry руководство. Существует также потенциально полезный вариант limit.

Выход выглядит следующим образом:

+ xaxf038fdab3eb626c7c3d38dfab00c59896ff96 Extract API controller methods into Base. 

+ указывает на то, что фиксация не имеет эквивалента на входной ветви (origin/master). Любая фиксация, предшествующая -, будет означать, что она имеет эквивалент в восходящей ветви.

0

У меня есть этот псевдоним в моем ~/.gitconfig:

[alias] 
    lg = log --stat --graph --decorate 

Я нахожу --decorate очень полезно для быстрой проверки, когда пульт дистанционного управления по сравнению с моей локальной копии.

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