что такое Git-эквивалент команд TFS shelve / unshelve? черри-пик?



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



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




  • я внес изменения в багажник

  • I shelve: набор изменений сохраняется на сервере (с меткой), и я получаю источник обратно до изменений

  • Я работаю в багажнике

  • кто-то может распаковать : получить набор изменений в своем рабочем пространстве


I знайте, что есть команда call cherry-pick, но я не уверен в рабочем процессе, и если он соответствует потребности.

669   3  

3 ответов:

то, что вы описываете, похоже на 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

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

С хороший ответ StackOverflow by 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 work и забрать, где вы остановились:

phil$ git fetch origin
phil$ git checkout -t origin/feature-x

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

в DVCS, чтобы достичь такого рода рабочего процесса, вам нужно:

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

другой способ-позволить другому разработчику получить вашу ветку (где вы совершили этот специальный набор изменений), и вишня-забрать, но это не рекомендуется, для Cherry-picked коммиты трудно отслеживать.

Comments

    Ничего не найдено.