別のブランチからGitにブランチを作成する


989

私は2つのブランチを持っています:masterdev

私はから「機能ブランチ」を作成したいのdevの枝を。

現在ブランチdevで、私は行います:

$ git checkout -b myfeature dev

... (多少の仕事)

$ git commit -am "blablabla"
$ git push origin myfeature

しかし、私のブランチを視覚化した後、私は得ました:

--**master**
------0-----0-----0-----0-----0
------------------------**dev**----**myfeature**

ブランチがマージされているようですが、なぜなのかわかりません...

私は何を間違っていますか?

別のブランチから分岐し、機能ブランチのリモートリポジトリにプッシュバックする方法を教えてください。

これらすべては、ここで説明するような分岐モデルで発生します

回答:


1431

投稿したリンクのメソッドが気に入った場合は、Git Flowご覧ください。

それは彼がそのワークフローのために作成したスクリプトのセットです。

しかし、あなたの質問に答えるには:

$ git checkout -b myFeature dev

devからMyFeatureブランチを作成します。あなたの仕事をして

$ git commit -am "Your message"

早送りせずに変更をdevにマージします

$ git checkout dev
$ git merge --no-ff myFeature

変更をサーバーにプッシュします

$ git push origin dev
$ git push origin myFeature

そして、あなたはそれがあなたが望む方法でそれを見るでしょう。


32
myFeatureそれが統合された後にプッシュすることの重要性は何devですか?
Alexander Suraphel 14年

3
@spartacus myFeatureマージ前にブランチがサーバーにプッシュされた場合、何も起こりません。しかし、myFeatureまだサーバーにプッシュされておらず、サーバーに表示したい場合は、それをプッシュする必要があります。
xOneca 2014年

15
であるgit checkout -b myFeature dev:これらの3つのコマンドと同じgit checkout dev、その後、git branch myFeatureその後、とgit checkout myFeature
Kevin Meredith 14

3
それはそうであるか、そうでなければならない。何か違うものを見ていますか?
Abizern 14

33
他の初心者を明確にするために、これは--no-ffマージがどのように見えるかです
A__

407

Gitの既存のブランチのいずれかから新しいブランチを作成する場合は、オプションに従ってください。

まず、新しいブランチを作成する場所からブランチに変更/チェックアウトします。たとえば、次のようなブランチがあるとします。

  • 主人
  • 開発者
  • ブランチ1

だからと呼ばれる新しいブランチを作成したい場合は、「subbranch_of_b1を」という名前の枝の下に「支社」の手順に従います。

  1. チェックアウトまたは「branch1」に変更

    git checkout branch1
    
  2. 今と呼ばれる新しいブランチ作成「subbranch_of_b1」の下に「支社」は、次のコマンドを使用しています。

    git checkout -b subbranch_of_b1 branch1
    

    上記と呼ばれる新しいブランチが作成されますsubbranch_of_b1を分岐下支社(ことに注意してくださいbranch1HEADは現在、それを指しているので、上記のコマンドでは必須ではありませんが、あなたは正確にできることあなたはしかし別のブランチ上にある場合)。

  3. これで、subbranch_of_b1を操作した後、ローカルまたはリモートでコミットしてプッシュまたはマージできます。

別のブランチの下にブランチを作成するサンプルのグラフィックイラスト

subbranch_of_b1をリモートにプッシュする

 git push origin subbranch_of_b1 

7
subbranch_of_b1をリモートにプッシュする方法
user269867 2016

13
@ user269867:「git push origin subbranch_of_b1」がこの作業を行います。
Praveen George、

4
ここで、変更をマスターにプッシュすると、ブランチ1で自動的に発生しますか?
マスターヨーダ

2
上記のコマンドのbranch1はHEADが現在ポイントしているため必須ではないことに注意してください。別のブランチにいる場合は、それを正確に指定できますが、それが私が探していたものです
felipsmartins

10
git checkout -b some-branch省略形かと思ってここに来ましたgit checkout -b some-branch master。それgit checkout -b some-branchは省略形であることがgit checkout -b some-branch <current_active_branch>
わかります

45

ブランチを作成する

  • マスターブランチがチェックアウトされたときにブランチを作成します。ここで、マスターのコミットは作成したブランチに同期されます。

    $ git branch branch1

  • branch1がチェックアウトされたときにブランチを作成します。ここで、branch1のコミットはbranch2に同期されます

    $ git branch branch2


ブランチをチェックアウトする

git checkoutコマンドはブランチを切り替えるか、作業ツリーファイルを復元します

  • $ git checkout branchname

ブランチの名前を変更する

  • $ git branch -m branch1 newbranchname

ブランチを削除する

  • $ git branch -d branch-to-delete
  • $ git branch -D branch-to-delete結合状態を確認せずに強制削除

ブランチを作成して切り替える

  • $ git checkout -b branchname

完全に含まれているブランチ

  • $ git branch --merged


************************** ブランチの違い [git diff branch1..branch2] ************** **********

複数行の違い
  • $ git diff master..branch1
単一行の違い
  • $ git diff --color-words branch1..branch2

1
また、ブランチの名前を変更した後git push origin :old-name new-name、古い名前のリモートブランチを削除して、新しい名前のローカルブランチをpushします。
95faf8e76605e973

13

同時作業を行う devブランチでます。何が起こるかというと、シナリオでは、機能ブランチがdevブランチの先端から前方に移動しますが、devブランチは変更されません。前進と考えることができるので、直線として描くほうが簡単です。あなたはdevのポイントAに到達し、そこから単純に並行パスを続行しました。2つのブランチは実際には分岐していません。

これで、マージする前にdevでコミットを行うと、同じコミットAから再び開始されますが、機能はCに移動し、devからBに移動します。これにより、視覚化しようとしている分割がブランチとして表示されます今分岐しています。

*-----*Dev-------*Feature

       /----*DevB
*-----*DevA
       \----*FeatureC

9

Git 2.23が導入しgit switchgit restoreその責任を分割するgit checkout

git 2.23の時点で、既存のブランチから新しいブランチを作成します。

git switch -c my-new-branch

新しいブランチ「my-new-branch」に切り替えました

  • -c--createの略で、よく知られているgitチェックアウトを置き換えます-b

変更点を詳しく説明しているこの Githubブログ投稿をご覧ください。

Git 2.23は、既存のコマンドスイートに新しい実験的コマンドのペアを提供します:git switchgit restore。これら2つは、よく知られているgitチェックアウトのためのより良いインターフェースを最終的に提供することを目的としています。新しいコマンドはそれぞれ明確な分離を意図しており、git checkoutの多くの責任をきちんと分けています


9

ローカルディレクトリの別のブランチからブランチを作成するには、次のコマンドを使用できます。

git checkout -b <sub-branch> branch

例えば:

  • 作成する新しいブランチの名前 'XYZ'
  • XYZを作成する必要があるブランチABCの名前
git checkout -b XYZ ABC

3

別のブランチからブランチを作成する場合は、次の手順に従います。

仮定

  1. 現在、マスターブランチにいます。
  2. コミットする変更はありません。(コミットする変更がある場合は、隠しておいてください!)
  3. BranchExistingは、nameで新しいブランチを作成する必要があるブランチの名前BranchMyNewです。

手順

  1. ブランチをローカルマシンにフェッチします。

    $ git fetch origin BranchExisting : BranchExisting
    

このコマンドは、ローカルに同じブランチ名で新しいブランチを作成します。

  1. 今、マスターブランチのチェックアウトから新しくフェッチされたブランチまで

    $ git checkout BranchExisting
    
  2. これでBranchExistingになりました。次に、この既存のブランチから新しいブランチを作成します。

    $ git checkout -b BranchMyNew
    

どうぞ!


1

別のブランチからブランチを作成するには、次の構文も使用できます。

git push origin refs/heads/<sourceBranch>:refs/heads/<targetBranch>

「git checkout -b」+「git push origin」より少し短い

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