2013年12月16日月曜日

Githubのブランチ操作あれこれ

Github ブランチ

こちらがテスト用に作成したリポジトリです。

リモートからローカルにリポジトリをクローンしてきます。
  git clone  git://github.com/junki929/test.git
Cloning into 'test'...
remote: Counting objects: 3, done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 3 (delta 0), reused 3 (delta 0)
Unpacking objects: 100% (3/3), done.
Checking connectivity... done
確認します。
  ls -ltr
total 0
drwxr-xr-x    4 nishizakijuntakashi  staff   136 12 16 16:27 test
testフォルダが作成されました。

次にローカルにブランチを作成してみます。
developブランチを作成
  git branch develop
feature_branchesを作成
  git branch feature_branches

実際にローカルにブランチが作成されたかどうか確認してみます。
  git branch
  develop
  feature_branches
* master
無事にdevelopとfeature_branchesの2つのブランチが作成されました。

現在masterで作業を行っているので、作成したdevelopブランチへ切り替えてみます。
  git checkout develop
* develop
  feature_branches
  master
developブランチに切り替わりました。

※このようなエラーが表示される場合は以下のコマンドを入力してください。
  git checkout master
 fatal: This operation must be run in a work tree
強制的にブランチを切り替えます。
  git symbolic-ref HEAD refs/heads/develop

するとブランチが切り替わります。
  git branch
* develop
  feature_branches
  master

ではローカルで作成した2つのブランチをGithubへプッシュしてみようと思います。
  git push origin develop
Total 0 (delta 0), reused 0 (delta 0)
To ssh://git@github.com/junki929/test.git
 * [new branch]      develop -> develop
  git push origin feature_branches
Total 0 (delta 0), reused 0 (delta 0)
To ssh://git@github.com/junki929/test.git
 * [new branch]      feature_branches -> feature_branches

リモート(Github)に反映されているか確認します。
  git branch -r
  origin/develop
  origin/feature_branches
  origin/master

リモートに2つのブランチが追加されています。

ローカルのブランチfeature_branchesをfeature_branches2に名称を変更してみます。
  git branch -m feature_branches feature_branches2
ブランチ名が変更されているか確認してみます。
  git branch
* develop
  feature_branches2
  master
feature_branches2にブランチ名が変更されました。

ローカルのブランチ名は変更されましたが、リモートのブランチ名はそのままになっています。ですが、リモートのブランチ名を変更するコマンドは現在無いらしく、一旦リモートのブランチを削除して再プッシュするのが普通みたいです。
まずリモートのブランチを削除してみようと思います。
  git push --delete origin feature_branches
To ssh://git@github.com/junki929/test.git
 - [deleted]         feature_branches
確認します。
  git branch -r
  origin/develop
  origin/master
さらに再プッシュしてみます。
  git push origin feature_branches2
Total 0 (delta 0), reused 0 (delta 0)
To ssh://git@github.com/junki929/test.git
 * [new branch]      feature_branches2 -> feature_branches2
確認します。
  git branch -r
  origin/develop
  origin/feature_branches2
  origin/master
これでリモートのブランチ名が変更されます。

ちなみにリモートへローカルと別名でプッシュするには以下のように行います。ローカルのブランチfeature_branches2をリモートへfeature_branches3という名前でプッシュします。
  git push origin feature_branches2:feature_branches3
Total 0 (delta 0), reused 0 (delta 0)
To ssh://git@github.com/junki929/test.git
 * [new branch]      feature_branches2 -> feature_branches3
確認してみます。
  git branch -r
  origin/develop
  origin/feature_branches2
  origin/feature_branches3
  origin/master
feature_branches3という名前で追加されています。

masterを除くローカルのブランチを削除してみます。
  git branch
* develop
  feature_branches2
  master
現在の作業ブランチからmasterへ切り替えます。
  git checkout master
  develop
  feature_branches
* master
master以外のブランチを削除します。
  git branch -D develop
Deleted branch develop (was b8d1698).
  git branch -D feature_branches2
Deleted branch feature_branches2 (was b8d1698).
確認します。
  git branch
* master
master以外のローカルブランチが削除されました。

リモートのmasterブランチからローカルへdevelopブランチを作成します。ちなみに-bのオプションを付けることで、作成後に自動的にそのブランチに切り替わります。
  git checkout -b develop origin/master
Branch develop set up to track remote branch master from origin.
Switched to a new branch 'develop'
確認します。
  git branch
* develop
  master

ファイルの内容を変更してみます。
次にdevelopブランチでファイルの内容を変更します。
  vi test.txt
ファイル内容を変更しましたよ!!
変更した内容をdevelopブランチにコミットします。
  git add .
  git commit -m "変更しました1"
[develop 8cb9145] 変更しました1
 1 file changed, 1 insertion(+), 5 deletions(-)
masterブランチへプッシュします。
  git push origin master
Counting objects: 5, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (1/1), done.
Writing objects: 100% (3/3), 286 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To ssh://github.com/junki929/test.git
   b8d1698..0f4b63b  master -> master
Githubのサイトを確認してみます。
このように変更内容が反映されました。
ブランチも上記のように変更があったことを表示しています。

次にこのmasterブランチからdevelopブランチを作成します。
  git checkout -b develop origin/master
Branch develop set up to track remote branch master from origin.
Switched to a new branch 'develop'
確認します。
  git branch
* develop
  master
ファイルの内容を変更します。
  vi test.txt
ファイル内容を変更しましたよ!!2回目です!!
コミットします。
  git add .
  git commit -m "test2"
[develop fa60e13] test2
 1 file changed, 1 insertion(+), 1 deletion(-)
この変更内容をリモートのdevelopブランチにプッシュします。
  git push origin develop
Counting objects: 5, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 302 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To ssh://github.com/junki929/test.git
 * [new branch]      develop -> develop
Githubを確認してみます。
 このように作成したdevelopブランチへ変更が反映されました。
ブランチも上記のように作成され、変更があったことを表しています。

この変更した内容をmasterブランチへプルリクエストします。
プルリクエストをしたあと、続けてmasterブランチへマージします。
マージした後はmasterブランチが変更されているか確認してみます。
このようにdevelopブランチの変更内容がmasterブランチへ反映されました。
ブランチもこのようにマージされたことを表しています。

次にfeature_branchesとfeature_branches2をdevelopブランチから作成します。
  git checkout -b feature_branches origin/develop
Branch feature_branches set up to track remote branch develop from origin.
Switched to a new branch 'feature_branches'
  git checkout -b feature_branches2 origin/develop
Branch feature_branches2 set up to track remote branch develop from origin.
Switched to a new branch 'feature_branches2'
確認してみます。
  git branch
  develop
  feature_branches
* feature_branches2
  master
feature_branchesブランチで作業を行うので切り替えます。
  git checkout feature_branches
Switched to branch 'feature_branches'
ファイルの内容を変更します。
  vi test.txt
ファイル内容を変更しましたよ!!もう3回目なんです!!
変更内容をコミットします。
  git add .
  git commit -m "test3"
[feature_branches 24b88af] test3
 1 file changed, 1 insertion(+), 1 deletion(-)
この変更内容をリモートのfeature_branchesブランチにプッシュします。
  git push origin feature_branches
Counting objects: 5, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 316 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To ssh://github.com/junki929/test.git
 * [new branch]      feature_branches -> feature_branches
次にfeature_branches2ブランチで作業を行うので切り替えます。
  git checkout feature_branches2
Switched to branch 'feature_branches2'
ファイルの内容を変更します。
  vi test.txt
ファイル内容を変更しましたよ!!これで4回目になります!!
変更内容をコミットします。
  git add .
  git commit -m "test4"
[feature_branches2 9318563] test4
 1 file changed, 1 insertion(+), 1 deletion(-)
この変更内容をリモートのfeature_branches2ブランチにプッシュします。
  git push origin feature_branches2
Counting objects: 5, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 320 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To ssh://github.com/junki929/test.git
 * [new branch]      feature_branches2 -> feature_branches2
Githubで確認してみます。
feature_branchesとfeature_branches2ともに変更されています。
ブランチも上記のように新たに2つ追加されています。

次にfeature_branchesをdevelopブランチへプルリクエストをします。
変更内容をマージします。
変更されているかmasterブランチを確認します。
ブランチを確認してみます。
上記のようにマージされていることが分かります。



  • この記事をシェアする

  • このエントリーをはてなブックマークに追加
  • このブログの更新をチェックする

  • follow us in feedly