TFS命令搁置/搁置的Git等效项是什么?摘樱桃?


76

我发现TFS中的搁置/取消搁置命令非常方便并且易于使用。Git中的等效功能是什么?

这是TFS中的场景:

  • 我改变了行李箱
  • 我搁置:更改集保存在服务器上(带有标签),在更改之前我将源取回
  • 我在后备箱里工作
  • 有人可以搁置:在他的工作区中设置更改

我知道有一个命令调用cherry-pick,但我不确定工作流程以及是否适合需要。

Answers:


85

您所描述的内容与相似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

如果我不想在架子集中提交这些更改,该怎么办?我们可以更改连接字符串以适应不同的环境,但是我们不希望在master上更改这些
字符串

在保留本地更改的同时,有没有可以隐藏的方法?可能先藏起来再藏起来吗?
Psddp '18年

是的,先进行存储再进行存储就可以做到这一点。但是我有点困惑你为什么要这么做。通常,如果要隐藏它,是因为您希望更改暂时消失,然后将其放回其他位置。如果要保留它们并继续工作,那么最好只提交一次。然后,您可以选择在其他位置提交的内容,而不用应用存储,并且如果要清理,可以始终将其压缩。
卡斯卡贝尔

2
实际上,这确实与TFS Shelveset不同。如果我正在本地git分支上工作...在一天结束时我想说...有所有疣和编译错误....将此工作放在服务器上以确保安全。因此,如果我的硬盘驱动器崩溃了,我也不会失去一切。但是,我还不想将工作推到远程分支,因为它还不完整。我的本地分支正在跟踪远程分支。Cascabel列出了8个单独的git命令来编排此命令……在TFS中……这是一个命令……搁置。
贝拉特

29

您想要做的就是在git中使用简单的旧分支来完成。

一个不错的StackOverflow的答案JaredPar

搁置是一种将所有更改保存在盒子上而无需检入的方法。这些更改将永久保存在服务器上。

这类似于提交到分支并将其推送到git中的服务器。

怎么做:

假设您正在“ master”分支上,并且决定实施功能X。您有了一个好的开始,但是您的老板告诉您,需要尽快实施功能Y。下一个立方体中的Phil将在完成功能X的同时完成志愿者X的工作,这是您的工作:

新建一个分支并切换到它:

$ git checkout -b feature-x

提交更改:

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

将其推送到Phil可以看到的服务器上:

$ git push origin feature-x

返回到master分支(尚未更改):

$ git checkout master

您可能还想为功能Y主动创建一个新分支:

$ git checkout -b feature-y

现在,Phil可以拉下您的特征X作品,然后从上次停下来的地方继续工作:

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

1
尽管它不如git便宜,它实际上存储在存储库中,并且如果存储库是分布式的,这意味着您可以将存储架从存储库中服务到任何计算机,而不必成为提交。(TFS2010)如果有某种策略,例如CI或门控签入(每次签入都必须在服务器端进行强制构建),则这非常方便
Onno

5

git stash有点类似,除了它仅限于您的工作树。

在DVCS中,要实现这种工作流程,您需要:

  • 在新分支中提交当前更改
  • 签出您可以继续进行的原始分支,没有进行任何已引入的更改(但已在新分支中提交)
  • 将该新分支推到一个裸仓库
  • 允许其他开发人员拉该新分支并将其合并到他当前的分支。

另一种方法是让其他开发人员获取您的分支(您已提交了那组特殊的更改),然后对其进行挑选,但这是不推荐的,因为挑选的提交很难跟踪


感谢您的回答,我标记了Jefromi的回答,因为它给了我一个例子,但您的回答也很有帮助。
MatthieuGD 2010年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.