1067

私のタスクは簡単だろうと考えて、マスターブランチの作業を開始しました。しばらくすると、もっと多くの作業が必要になることに気づき、このすべての作業を新しいブランチで行いたいと考えました。

masterを汚さずに新しいブランチを作成し、これらすべての変更を持ち込むにはどうすればよいですか?

4

5 に答える 5

861

まだコミットしていない場合は、(1: ブランチ) と (3: チェックアウト) だけで十分です。
または、1 つのコマンドで:git checkout -b newBranch

Git 2.23 以降(2019 年第 3 四半期) では、新しいコマンドgit switchは 1 行でブランチを作成します (同じ種類のreset --hardを使用するため、その効果に注意してください)。

# First, save your work in progress!
git stash

# Then, one command to create *and* switch to a new branch
git switch -f -c topic/wip HEAD~3

git resetマニュアルページに記載されているように:

$ git stash                # (0) Save your work in progress
$ git branch topic/wip     # (1)
$ git reset --hard HEAD~3  # (2)  NOTE: use $git reset --soft HEAD~3 (explanation below)
$ git checkout topic/wip   # (3)
  1. いくつかのコミットを行いましたが、" master" ブランチに入れるには時期尚早であることに気付きました。トピック ブランチでそれらを磨き続けたいのでtopic/wip、現在の から " " ブランチを作成しますHEAD
  2. ブランチを巻き戻して、masterこれら 3 つのコミットを取り除きます。
  3. " topic/wip" ブランチに切り替えて、作業を続けてください。

繰り返しますが、1 つのコマンドですべてを実行する新しい方法 (2019 年および Git2.23 以降):

git switch -f -c topic/wip HEAD~3

注:コマンドの「破壊的な」効果のためgit reset --hard(それはインデックスと作業ツリーをリセットします。それ以降、作業ツリー内の追跡されたファイルへの変更<commit>は破棄されます)、私はむしろ次のようにします:

$ git reset --soft HEAD~3  # (2)

これにより、プライベート ファイルが失われないようになります (インデックスに追加されません)。
この--softオプションは、インデックス ファイルにも作業ツリーにもまったく触れません (ただし、<commit>すべてのモードと同様に、ヘッドを にリセットします)。


于 2010-10-10T08:52:37.047 に答える
343

この質問で述べたように:Git:マスターのタグなし/コミットされていない変更からブランチを作成します:stashは必要ありません。

使用するだけです:

git checkout -b topic/newbranch

コミットされていない作業はすべて、新しいブランチに引き継がれます。

プッシュしようとすると、次のメッセージが表示されます

致命的:現在のブランチ機能/NEWBRANCHにはアップストリームブランチがありません。現在のブランチをプッシュしてリモートをアップストリームに設定するには、次を使用します。

git push --set-upstream origin feature/feature/NEWBRANCH

リモートでブランチを作成するために提案されたとおりに実行します。

git push --set-upstream origin feature/feature/NEWBRANCH

于 2011-08-19T06:05:57.470 に答える
103

次の手順を実行します:

  1. 新しいブランチを作成します。

     git branch newfeature
    
  2. 新しいブランチをチェックアウトします: (これにより作業がリセットされることはありません。)

    git checkout newfeature
    
  3. この新しいブランチで作業をコミットします。

    git commit -s
    

上記の手順を使用すると、元のブランチがクリーンに保た
れ、「git reset --hard」を実行する必要がなくなります。

commit のPS-sパラメータは--signoff

于 2011-08-25T15:12:51.307 に答える
37

まだコミットを行っていないので、すべての変更を stash に保存し、新しいブランチを作成して切り替え、それらの変更を作業ツリーに戻すことができます。

git stash  # save local modifications to new stash
git checkout -b topic/newbranch
git stash pop  # apply stash and remove it from the stash list
于 2010-10-10T15:27:45.233 に答える