Как правильно переключать ветки GIT и возвращаться к дальнейшей работе. - PullRequest
0 голосов
/ 15 декабря 2018

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

Я работаю над Branch X, обновил 4 файла.Теперь меня просят переключить передачи и работать в ответвлении Y. Я не готов продвигать изменения в ответвлении X. Что мне делать?

Раньше я думал, что для этого есть тайник,git stash, извлеките ветку Y, а затем вернитесь к ветви X и git stash apply, и я должен вернуться туда, где я начал.

Однако недавно я сделал это и облажался, выполнив следующее:

  • git stash ветвь X
  • извлеченная ветвь Y, измененные файлы
  • git stash ветвь Y
  • проверенная ветвь X
  • git stash apply на ветви X и ... насколько я могу судить, мой тайник из ветви Y был применен к ветви X.

Так что я совершенно сбит с толку.Что случилось выше того, что должно было случиться?Должен ли я делать некоторые коммиты в процессе?

Ответы [ 2 ]

0 голосов
/ 15 декабря 2018

Помните, что с Git ваши изменения и ветки принадлежат вам, пока вы не отправите их в другое место.Так что это совершенно безопасно и даже отличная идея - зафиксировать свои локальные изменения, как только вы выполнили определенное количество работы (вы всегда можете rebase и раздавить их позже).

В вашем случае,вот что вы могли бы сделать (хотя филиал X не был «готов»):

git add .
git commit -a -M'WIP: (describe where you are)'
git checkout Y

Филиал X на ваших пультах остается без изменений, но ваша локальная работа безопасна.Никто другой не увидит его, пока вы не push сделаете это на удаленном компьютере.

Если вы хотите сохранить X в его последнем чистом состоянии, просто проверьте новую ветку и добавьте в нее ваши коммиты:

git checkout -b pick-a-descriptive-name-for-the-branch
git commit ...   # commits land on this new branch
git checkout Y

Теперь X такой же, каким был до того, как вы начали вносить последний набор изменений, pick-a-descriptive-name-for-the-branch содержит изменения, в которых вы находились, и Y не затрагивается.

Вы можете легко cherry-pick последний коммит pick-a-descriptive... до X, когда будете готовы продолжить работу:

git checkout pick-a-descriptive-name-for-the-branch
git log -1 # Note the SHA1 of the commit, which is your work in progress
git checkout X
git cherry-pick -n SHA1

Это будет принимать изменения с последнего коммита pick-a-descriptive-name-for-the-branch и добавьте их к X, не совершая их.

0 голосов
/ 15 декабря 2018

git stash apply будет применять последние сохраненные изменения.Я подозреваю, что вы хотели применить конкретный тайник.Вы можете просмотреть свои тайники с помощью git stash list и применить определенный с помощью git stash apply stash@{N}.

Вы также можете назвать свой тайник с помощью git stash save "some name", чтобы их было легче найти позже.

Также обратите внимание, что git stash apply хранит тайник в списке тайников.Если вам больше не нужен тайник после нанесения, посмотрите на git stash drop или git stash pop.

...