Хеши коммитов отличаются от локальных и удаленных - PullRequest
3 голосов
/ 13 апреля 2011

Я вижу какое-то поведение, которое мой git-fu не совсем способен объяснить.

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

$ git diff имя-ветви имя-источника / имя-ветви

появляется пустым git pull также говорит, что моя ветвь уже обновлена.

Кажется, что git pull сгенерировал фиктивный коммит (коммит слияния), но я не могу понять, почему.Это особенно важно, так как нам нужно, чтобы наши серверы приложений имели одинаковый хеш коммита после выполнения git pull.

Что-нибудь очевидно, что я пропускаю?Любая дополнительная информация, которая может помочь точно определить, в чем проблема?

Спасибо

1 Ответ

3 голосов
/ 14 апреля 2011

То, что происходит, это то, что вы используете git pull, который неявно делает git fetch && git merge origin/master (при условии, что вы были в основной ветке).Пустой коммит на самом деле не пустой.Если бы у вас были конфликты, вам пришлось бы их разрешать, затем добавлять файлы и фиксировать.Теперь diff покажет ваши разрешения конфликтов.Если в слиянии нет конфликтов, diff не покажет вам ничего, например, когда вы смотрите на него в gitk.

Чтобы избежать этого, явно сделайте git fetch, а затем либо объедините, либо перебазируйте ваши изменения с помощьюудаленная ветвь (например, origin / master).

Вы можете сделать pull rebase на git pull --rebase.Вы также можете сделать это поведение по умолчанию для pull, если хотите, изменив конфигурацию.

надеюсь, это поможет.

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