現在のブランチですべての変更を取り、Gitの新しいブランチに移動します


105

私は自分のマスターブランチのマイナーなバグ修正になると考えていたものに取り組み始めました。しかし、最初から開発を行うために別のブランチを作成したいところまで、それは制御不能になりました。

だから今私がしたいのは:

  1. (たとえば)「エッジ」という新しいブランチを作成する
  2. マスター上のすべての変更済み/追跡されていないファイルをエッジに移動します(マスターがバグ修正を開始したときから変更されないように)
  3. エッジで作業を終了し、マスターにマージします

これどうやってするの?

回答:


103

まだ何もコミットしていない場合、あなたはすでに正しい立場にいます。

  1. 新しいブランチを作成します。 git checkout -b edge
  2. ファイルは変更されていません。git addいつものようにコミットする必要があるものだけです。
  3. のコミットが終了したらedgemasterwith git checkoutとに切り替えますgit merge edge

まだ何もコミットしていなかったので、最初の行は歓迎の光景でした...ふう、それは実際にはかなり痛みがありませんでした:-)
Drenai

87

JBの答えに追加するには、マスターでいくつかのコミットを既に開始している場合、最終的に「エッジ」の取り組みとして、次のことができます。

git stash
git checkout -b edge master
git branch -f master SHA1_before_your_commits
git stash apply

stash wrapperは厳密には必要ありませんが、コミットされていない動作中の変更のためだけですよね?
HaveAGuess

4
@HaveAGuessそうです。「すべての変更を行う」ことにより、現在追加されていない現在の変更も含めました。したがって、隠し場所。
VonC、2011年

2行目と3行目を「git checkout -b edge master」に折りたたむことができませんでしたか?
ポールリンチ

@PaulLynch 、オンにmasterすべきコミット(オン)edge オンmasterであることを考慮すると、はい。回答を編集しました。
VonC 2013年

git stash使用git checkout -bしても作業ツリーがまったく変更されないため、ここではどのように役立つかわかりません...
user1686

13

マスターから既存のブランチに作業を移動しようとしているが、マスターの背後にいる場合、gitでは他のブランチに切り替えることができません。この場合、これを行います:

git stash
git checkout oldBranch
git merge master
git checkout master
git stash apply
git checkout oldBranch
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.