мерзавец ошибочно заявляет, что я впереди источника / мастер на 1 коммит - PullRequest
1 голос
/ 01 февраля 2012

[править: добавил выходные команды по запросу и реорганизовал для ясности] Я получил два клона конкретного репо.

git log
commit e06424b5...
...
commit 557a0eb8...

показывает то же самое в обоих, с одинаковым хешем вверху.

git remote show origin

одинаковое в обоих

git branch
* master

все еще одинаково в обоих

Теперь некоторые отличия.

От «хорошего» клона:

git log origin/master..
commit e06424b5...

git show-ref HEAD
e06424b5... refs/remotes/origin/HEAD

# On branch master
nothing to commit (working directory clean)

От «плохого» клона:

git log origin/master..
commit 557a0eb8...

git show-ref HEAD
557a0eb8... refs/remotes/origin/HEAD

git status
# On branch master
# Your branch is ahead of 'origin/master' by 1 commit.

Это отличается [исправление: ранее я сообщал, что этот вывод был таким же].Похоже, что show-ref указывает, что эта проверка на один коммит отстает от , в то время как статус говорит, что он впереди.Но git reset --hard e06424b5 ничего не меняет.

Когда я спрашиваю «плохого» клона, что он думает, что нужно нажать:

git diff --stat origin/master

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

Кто-нибудь знает, как заставить извлечение осознать, что ему нечего нажать?

[править: здесьнекоторые дополнительные команды и их выходы из «плохого» клона ...]

git log --graph --decorate --oneline    
* e06424b (HEAD, master)
* 557a0eb (origin/master, origin/HEAD) 

git rev-parse origin/master
557a0eb

git rev-parse HEAD
557a0eb (the previous hash)
e06424b (the correct, most recent hash)

Ответы [ 3 ]

2 голосов
/ 01 февраля 2012

Возможно, вы нажали на одну из репозиториев (ту, у которой нет сообщения впереди).То, что вы оттолкнулись от одного репо, не означает, что другой репо будет видеть то же самое.Вы должны сделать git fetch origin, чтобы ветви отслеживания обновлялись.

0 голосов
/ 01 февраля 2012

Учитывая ваши комментарии, мне кажется, что вы на самом деле работаете в режиме "отстраненной головы".

Проблема в том, что ваша первоначальная публикация подразумевает, что ветка указывает на определенное место, которое вам не нужно (это было бы намного более понятно, если бы вы действительно опубликовали какой-либо вывод выходных данных команд git run), в этом случае git reset --hard - это то, что вы ожидаете сделать, чтобы это исправить.

Но на самом деле кажется, что HEAD просто указывает на то место, где вы этого не ожидаете, git checkout - это команда, которую вы используете для исправления того, на что указывает HEAD. Я предполагаю, что может быть что-то блокирует работу кассы, поэтому я добавил --force.

ВНИМАНИЕ: использование git checkout с параметром --force может уничтожить все ваши незафиксированные изменения или подобные вещи.

git checkout --force master

Предполагая, что у вас есть основная ветка, которую вы хотите оформить, и что она фактически отслеживает источник / мастера, это должно вывести вас из рассола, в котором вы оказались.

0 голосов
/ 01 февраля 2012

см. Вывод

git log origin/master HEAD master --graph --decorate --oneline

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

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