Не вижу удаленных изменений после 'git pull --rebase' - PullRequest
4 голосов
/ 15 марта 2011

Я пытаюсь сделать 'git pull --rebase', но не вижу каких-либо удаленных изменений. Когда я делаю «git status», я вижу: «Ваша ветка опережает« origin / master »на 12 коммитов».

Но я вхожу в ветку dev, а не master.

$ git branch
  master
* dev

И моя ветка 'dev' должна отслеживать 'remotes / origin / dev'.

Все, что мне нужно, - я работаю над 'dev' и хочу получать удаленные изменения на удаленном устройстве.

Но я сделал 'git pull --rebase', который каким-то образом изменяет тягу удаленного 'master' на мою ветку 'dev'.

Скажите, пожалуйста, как мне оправиться от ситуации?

  1. ошибочно удалить изменения, которые я извлекаю из удаленной ветки 'master' (после того, как я сделал 'git pull --rebase')

  2. внести изменения в удаленную ветку 'dev' в мою ветку 'dev'.

Спасибо.

Ответы [ 2 ]

3 голосов
/ 15 марта 2011

Звучит так, как будто ваша ветка разработчика изначально была основана на origin/master вместо origin/dev, или каким-то образом dev был изменен для отслеживания origin/master в любом случае. Вы можете проверить это с помощью:

git config branch.dev.merge

Если это говорит refs/heads/master вместо refs/heads/dev, вы можете изменить восходящую ветку для вашей dev ветви с помощью:

git checkout dev
git branch --set-upstream dev origin/dev

Тогда, чтобы исправить вашу ветку, я бы:

  1. Убедитесь, что вы находитесь на ветке dev с git checkout dev
  2. Убедитесь, что git status чистый
  3. Создать ветку, чтобы сохранить, где вы были (для безопасности): git branch dev-wrongly-rebased
  4. Используйте git reflog, чтобы найти коммит до того, как вы перейдете на origin/master
  5. Сброс dev до этой точки git reset --hard COMMIT-BEFORE-BAD-REBASE
  6. Наконец, сделайте git rebase origin/dev

При перебазировании я предпочитаю всегда делать это в два шага, например ::1010

git fetch origin
git rebase origin/dev

... так как я думаю, что это менее подвержено ошибкам, чем git pull --rebase. Надеюсь, это пригодится.

0 голосов
/ 15 марта 2011

Вы можете переместить коммиты поверх правильной удаленной ветви с помощью

git rebase --preserve-merges --onto origin/dev start end

для диапазона коммитов, указанных в начале и конце, которые нужно перенести на dev.

Затем настройте отслеживание правильно. При желании вы можете отредактировать файл .git / config и сравнить, как отслеживание настраивается для каждой ветви одновременно, и обеспечить согласованное поведение.

С этого момента вы получаете новую удаленную ветку

git checkout -t origin/branch_name

Или, если вы отправляете новую ветку на пульт

git push -u origin branch_name

Они настроят отслеживание, как вы хотите.

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

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