Git: как ветку я не обязуюсь опережать источник / мастер - PullRequest
21 голосов
/ 12 мая 2009

Я работаю на 100% с веткой, которую я сделал из основной ветки. Теперь, когда коллега вернулся к оригиналу / мастеру, я попытался перенести эти изменения в мою личную ветку. Когда я делаю 'git checkout master', за которым следует 'git status', я получаю следующее:

# Your branch is ahead of 'origin/master' by 2 commits.

Как ветка, которую я никогда не фиксирую, передается двумя коммитами? Какой лучший способ узнать, что они совершают, и, по сути, отменить их? Я не хочу возвращать что-либо обратно в origin / master, поскольку это может вызвать неизвестные конфликты.

Ответы [ 4 ]

35 голосов
/ 12 мая 2009

Чтобы увидеть ваши коммиты в HEAD, которые не находятся в origin / master:

git log origin/master..

Чтобы сдуть их и сделать вашу ГОЛОВУ такой же, как у origin / master:

git reset --hard origin/master

Как вы внесли изменения в свой собственный репозиторий? Я заметил, что вы упомянули «толчок» ... Является ли происхождение центральным репо? Репо вашего коллеги? Я подозреваю, что вы на самом деле хотели сделать изменения в своем коллеге, либо напрямую, либо из центрального этапа, а не толкать. Может случиться так, что 2 изменения, которые у вас есть перед началом координат / оригиналом, на самом деле являются изменениями вашего коллеги, но ветка отслеживания происхождения / мастера устарела.

4 голосов
/ 12 мая 2009

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

Сообщение # Your branch is ahead of 'origin/master' by 2 commits. говорит:

# Your branch 'mybranch' has two commits not in 'origin/master'

Представляя пользователей git SVN-подобные номера ревизий, ваша ветвь имеет коммиты 1, 2, 3, 4, 5 - но origin/master имеет только 1, 2, 3. Так что история ревизий выглядит примерно так: Диаграмма ASCII ..

your branch                                   -- [commit 4]--[commit 5]
                                             /                    /\ HEAD
master --[commit 1]--[commit 2]--[commit 3]-/
                                       /\ origin/master

Чтобы отобразить последние две фиксации в журнале, вы можете сделать ..

git log HEAD..HEAD~2
0 голосов
/ 20 июля 2012

Возможно, вам необходимо убедиться, что ваш источник / мастер обновлен до вашей версии репо мастер. Попробуйте запустить:

git fetch origin master

так что ваш местный источник / мастер такой же, как и мастер репо. Затем, когда вы запускаете

git pull origin master

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

0 голосов
/ 12 мая 2009

Вы когда-нибудь git rebase работали над веткой, над которой работаете?

Если нет, попробуйте скопировать ветку (git checkout -b testrebase) и ввести git rebase master, чтобы проверить, работает ли это. Это разрушит все сделанные вами коммиты по отношению к мастеру, а затем попытается применить их обратно (в сущности, история имеет смысл). Если это не работает, просто удалите testrebase.

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