gitk
вид немного мал, поэтому немного догадок здесь, и не содержит совершающие-хэши или текущее местное HEAD
или совершают следующие «Удалены объявления из основного макета "- это фиксация с комментарием" Добавлены прокомментированные URL-адреса в .env "или что-то совсем другое? В любом случае он не имеет фиксации хеша 48673b3
.
Ваш тест --contains
полезен. Вы также должны запустить git reflog
и grep
или найти 48673b3
. Это может показать вам, когда ваш местный HEAD
указал на 48673b3
, и что произошло сразу или после этого.
Скорее всего, через прямую команду или какой-либо инструмент, который вы переустановили или скомпилировали или внесли исправления в remotes/origin/master
в свое местное репо. Или, может быть, вы сбросили дату/время или автора. Git теперь рассматривает это как независимую линию развития - вы никогда не должны переустанавливать или раздавать в фиксацию, которую вы уже что-то нажали, если это то, что произошло.
Вашего git reflog
может показать что-то вроде этого, например:
20fa43d [email protected]{0}: commit (amend): Added commented out urls to .env
48673b3 [email protected]{1}: commit: Added commented out urls to .env
e039c6c [email protected]{2}: commit: Updated backend variables to new test server.
Если да, то (изменить) говорит вам, что пошло не так - вы бы переписаны местную историю в этом случае, и вы можете не более длинный шаг вперед этой ветви. Если это так, то вы можете это исправить с перебазирования (возможно сделать это на временную ветвь первого):
git rebase --onto origin/master origin/master
В зависимости от того, что изменилось в вашей местной истории, вы можете получить слияния конфликт разрешить для измененный коммит в вашем местном. После этого вы будете переписывать любые локальные коммиты, чтобы они согласились с удаленной историей, и вы должны иметь возможность выполнить быстрый перемотки вперед.
Вопрос Редактировать обновление 2 Ответ:
С информацией о другой, вверх по течению пульта дистанционного управления, то перебазироваться на то и reflog, это достаточно ясно, что произошло.
То же самое изменение, которое вы сделали в 48673b3
и подтолкнул к origin/master
также содержится в другой фиксации, либо сам по себе или смешанного с использованием других изменений, сделанных вами или кем-то еще и нажат в upstream/master
(bt/master
для вас). Когда вы выберете git pull
из восходящего потока, Git создаст слияние. Хотя он не отображается в reflog, вы вытаскивали и затем предварительно сворачивали на /[email protected]{147}
, поэтому разумно предположить, что вы сделали это снова после [email protected]{144}
, пытаясь вернуться к линейной истории, удалив фиксацию слияния. Вы запустили git rebase
без --keep-empty
, и когда 48673b3
был переигран сверху-вверх bt/master
, делать нечего было, так что фиксация была отброшена по умолчанию для rebase.
origin/master
origin/master
теперь отклонился от вашего местного репо, будучи одним фиксатором 48673b3
перед самым младшим общим родителем, который может быть 14948e3
. Git не позволит вам нажать (без -f
силы) - даже если хеши дерева могут быть идентичными, истории фиксаций расходятся.
Некоторых советы по рабочим процессам:
1) Если вы предпочитаете перебазирования и линейную историю, имеющие слияния-фиксации (вполне справедливо), то всегда придерживаться его. Запустите git fetch ...
и git rebase ...
, никогда не запускайте git pull
(выборка и слияние) или git merge
, или если необходимо, запустите их с помощью --ff=only
, чтобы они запускались только тогда, когда у вас нет новых коммитов в вашей локальной сети. Рассмотрим настройку config pull.ff=only
и merge.ff=only
, чтобы обеспечить выполнение этого в случае, если вы забудете их в командной строке. С этим на месте, если вы явно не заявите об ином, вы никогда не попадете в нелинейное состояние с восходящим потоком, вам всегда будет напоминать git rebase bt/master
.
На самом деле это не поможет устранить вашу проблему, но лучше избегать смешивания стратегий слияния/переупорки. Если ваша стратегия заключается в переустановке, и вы случайно создаете слияние, перезагрузитесь в свой новый локальный коммит и повторите попытку.
2) Если вы работаете и нажимаете на два удаленных РЕПО, один из которых изменяется (вверх по течению), а вы пересобираете, рано или поздно вы столкнетесь с этой проблемой и должны определить, что ваш местный «сейчас», новейший "и принудительно нажмите на ваш частный origin/master
.Возвращение ветки, которая уже была нажата на удаленный компьютер, всегда будет в конечном итоге отклеиваться - перераспределение (или раздача или изменение) - это способы перезаписи истории, поэтому истории всегда будут расходиться. Если вы используете origin/master
просто как «резервное копирование только для записи» для своего кода, привыкнуть к запуску push -f
, чтобы перезаписать его (конечно, вам нужно знать, что это правильно или вы потеряете фиксации), или еще лучше, просто push origin HEAD:
`date -u +% Y% m% d% H% M% S``, чтобы дать вам не противоречащие ссылки, которые вы можете позже отбросить. Если вы используете origin
для чего-то более сложного, тогда вам нужно будет знать о проблемах, которые возникнут при перезагрузке вверх.
Похоже, что ваши изменения уже были перенесены в пульт. 'git pull' должен просто ускоряться вперед. – thirtythreeforty
Попробуйте 'gitk --all', чтобы увидеть точные отношения между локальными и удаленными ветвями. – Rup
Опубликовать журнал последних коммитов для локального и удаленного. – javabrett