Невозможно переключить ветки. Что я делаю неправильно?

Я, наверное, что-то упустил. Пожалуйста, укажите на мою ошибку.

У меня есть хранилище. Ствол называется master (очевидно) и содержит ряд файлов. Я создал ветку под названием dev-17 и добавил еще один файл (называется file17) к этому.

Теперь в системе на основе Debian я делаю:

$ git fetch origin
$ git reset --hard origin/master
HEAD is now at 13e51c7 20150418.2030
$ git clean -f -d
$ git status
# On branch master
nothing to commit (working directory clean)
$

Выглядит хорошо. И ls показывает все файлы, которые я ожидаю. Тогда я делаю:

$ git fetch origin
$ git reset --hard origin/dev-17
HEAD is now at 145e638 add file17
$ git clean -f -d
$ git status
# On branch master
# Your branch is ahead of 'origin/master' by 1 commit.
#
nothing to commit (working directory clean)
$

Делать ls показывает, что добавил file17 действительно есть. So, apparently I'm on the dev-17 ветка. Но почему git status say that I'm on master?

Now for the real problem, while on the dev-17 branch (EDIT: it appears that the above does not really take me to the dev-17 branch, so this statement is incorrect) this happens when I want to see if file17 изменилось:

$ git --no-pager diff --name-only dev-17..origin/dev-17 -- ./file17
fatal: bad revision 'dev-17..origin/dev-17'
$

Предложения очень приветствуются.

2 ответа

Решение

Для переключения веток вам не нужно делать сброс. вам нужно checkout желаемая ветвь

git fetch --all --prune
git checkout dev-17

Это оформит ветку dev-17

Перейдите в Git CMD и при необходимости выполните следующие команды.

Если вы переключаетесь в первый раз, используйте: git fetch --all

Если вы пытаетесь вытянуть недавно созданную ветку, используйте: git fetch

reset двигает ваш ток HEAD на указанный коммит (и --hard обновляет рабочие файлы соответственно).

Если твой HEAD является master и ты бежишь $ git reset --hard origin/dev-17Вы двигаетесь master в такой же степени, как origin/dev-17, Вы перемещаете ссылку на другой коммит, а не только обновляете свои локальные файлы. Вы все еще на master как git status говорит вам, но master теперь другой коммит (такой же как origin/dev-17 указывает на).

Чтобы обновить содержание origin/dev-17 с новыми коммитами с вашего пульта, используйте git fetch origin dev-17,

Чтобы обновить ваши локальные файлы, чтобы отразить содержание origin/dev-17, вам нужно checkout филиал origin/dev-17,

Если вы хотите продолжить работу над веткой, я бы посоветовал создать локальную ветвь, в которой можно выполнить коммит:

git checkout origin/dev-17
git checkout -b dev-17

После добавления коммитов в ветку вы можете отправить их обратно на пульт:

git push origin dev-17

(это не удастся, если дополнительные коммиты были созданы / отправлены на удаленный компьютер, когда вы работали локально. В этом случае вам нужно pull во-первых, см. ниже.)


После того, как вы это настроите, сделать местный филиал актуальным очень просто. Что вы хотите сделать, это:

git fetch origin dev-17
git merge origin/dev-17

и это можно сделать за одну операцию:

git pull origin dev-17

(при условии, что вы находитесь в вашем местном филиале dev-17)

Другие вопросы по тегам