web-dev-qa-db-ja.com

TFSコマンドのシェルフ/アンシェルブに相当するGitは何ですか?チェリーピック?

TFSのshelve/unshelveコマンドは非常に便利で使いやすいことがわかりました。 Gitで同等のものは何ですか?

tFSのシナリオは次のとおりです。

  • トランクに変更を加えました
  • 棚上げ:変更セットは(ラベル付きで)サーバーに保存され、変更前にソースを取得します
  • トランクで働いています
  • 誰かが棚上げを解除できる:ワークスペースで変更セットを取得する

Cherry-pickというコマンドコールがあることは知っていますが、ワークフローとニーズに合っているかどうかはわかりません。

70
MatthieuGD

説明する内容は 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
81
Cascabel

あなたがしたいことは、gitの単純な古い分岐で達成されます。

Nice StackOverflow answer by JaredPar

棚は、チェックインせずにボックス上のすべての変更を保存する方法です。変更はサーバー上に保持されます。

これは、ブランチにコミットしてgitのサーバーにプッシュすることに似ています。

どうやってするの:

「マスター」ブランチで作業していて、機能Xを実装することに決めたとします。まずは機能Xを使用しますが、上司は機能Yをできるだけ早く実装する必要があると言います。次のキューブのPhilは、機能Yを実行している間に機能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
28
Neall

git stash は少し似ていますが、your作業ツリーに限定されます。

DVCSでは、このようなワークフローを実現するには、次のことが必要です。

  • 新しいブランチで現在の変更をコミットする
  • 元のブランチをチェックアウトします。導入した変更はありません(ただし、新しいブランチでコミットします)。
  • その新しいブランチをむき出しのリポジトリにプッシュする
  • 別の開発者がその新しいブランチをプルして、現在のブランチにマージできるようにします。

別の方法は、他の開発者がブランチをフェッチできるようにすることです(その特別な変更セットをコミットした場所)、そして cherry-pick it ですが、 cherry-選択したコミットを追跡するのは困難です

5
VonC