что такое Git-эквивалент команд TFS shelve / unshelve?вишневый выбрать? - PullRequest
70 голосов
/ 18 июня 2010

Я обнаружил, что команды shelve / unshelve в TFS очень удобны и очень просты в использовании. Какой эквивалент у Git?

вот сценарий в TFS:

  • я сделал изменения в багажнике
  • Полка: набор изменений сохраняется на сервере (с меткой), и я получаю исходный код до изменений
  • Я работаю в багажнике
  • Кто-то может снять с себя: получить набор изменений в своем рабочем пространстве

Я знаю, что есть вызов команды cherry-pick, но я не уверен в рабочем процессе и соответствует ли он нужному.

Ответы [ 3 ]

81 голосов
/ 18 июня 2010

То, что вы описываете, похоже на git stash, за исключением того, что с помощью git у вас есть собственный репозиторий (а не один на сервере), только вы можете вернуть это изменение обратно. *

Общая идея:

# do some stuff
vim foo/bar.c
# stash away your changes
git stash

# do some other things...

# retrieve your changes
git stash pop

Если вы хотите, чтобы кто-то еще имел доступ к этому набору изменений, вам нужно вместо этого зафиксировать его в рабочей ветке:

# make yourself a branch
git checkout -b temp-featureA
# commit to it
git add foo/bar.c; git commit

# now you push this branch (or they could just fetch straight from you)
git push origin temp-featureA


# Now, in someone else's repo:
# Fetch updates
git fetch origin
# Make a branch tracking the remote branch
git branch temp-featureA origin/temp-featureA

# Either check it out:
git checkout temp-featureA
# or cherry-pick it, to apply the changes somewhere else:
git cherry-pick temp-featureA
# or, if it's multiple commits, rebase it!
git rebase --onto my-branch start-of-featureA temp-featureA
28 голосов
/ 18 июня 2010

То, что вы хотите сделать, выполняется простым ветвлением в git.

От хороший ответ StackOverflow от JaredPar :

Стеллаж - это способ сохранить все изменения на вашем ящике без регистрации. Изменения сохраняются на сервере.

Это аналогично фиксации ветки и отправке ее на сервер в git.

Как это сделать:

Допустим, вы работаете над ветвью "master" и решили внедрить функцию X. Вы хорошо ее освоили, но затем ваш начальник сказал, что функция Y должна быть реализована как можно скорее. Фил в следующем кубе над добровольцами, чтобы закончить функцию X, пока вы делаете функцию Y. Вот что вы делаете:

Создайте новую ветку и переключитесь на нее:

$ git checkout -b feature-x

Передайте ваши изменения:

$ git add filethatyouchanged.cc
$ git commit -m 'partial implementation of feature X'

Переместите его на сервер, который видит Фил:

$ git push origin feature-x

Вернитесь в основную ветку (которая не изменилась):

$ git checkout master

Вы также можете заранее создать новую ветвь для функции Y:

$ git checkout -b feature-y

Фил теперь может снять вашу функцию X и выбрать, где вы остановились:

phil$ git fetch origin
phil$ git checkout -t origin/feature-x
5 голосов
/ 18 июня 2010

git stash немного похож, за исключением того, что оно ограничено вашим рабочим деревом.

В DVCS для достижения такого типа рабочего процесса вам необходимо

  • зафиксировать ваши текущие изменения в новой ветке
  • получить исходную ветку, в которую вы можете перейти, без внесенных вами изменений (но зафиксированных в новой ветке))
  • подтолкнуть эту новую ветвь к голому репо
  • позволяет другому разработчику вытянуть эту новую ветку и объединить ее со своей текущей веткой.позволить другому разработчику выбрать вашу ветку (где вы зафиксировали этот особый набор изменений) и cherry-pick it , но это не рекомендуется, поскольку вишневые коммиты сложно отследить.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...