Top / GitHub / TIPS集

追跡ブランチをあとから設定する。

$ git branch -vv
  dev     bbf5c22 [origin/dev] committed on 2017.1.27
* dev_#50 bbf5c22 committed on 2017.1.27
$ git branch --set-upstream-to origin/dev    <- もしくは -u だけ
Branch dev_#50 set up to track remote branch dev from origin.
$ git branch -vv
  dev     bbf5c22 [origin/dev] committed on 2017.1.27
* dev_#50 bbf5c22 [origin/dev] committed on 2017.1.27
$

存在しないリモートブランチは指定できません。

また、アンセットするには

 $ git branch --unset-upstream

[git]ローカルからpushした時に自動的に追跡ブランチにする - dackdive's blog

ローカルのブランチがどのリモートを追跡しているかを確認する

$ git branch -vv
* master 5e1dd3a [origin/master] Merge pull request #5    <- master がorigin/masterを追跡している。

たとえば、--trackオプション(-t もおなじ) で、リモートと同名のブランチを作成したとすると

$ git checkout --track origin/dev
Branch dev set up to track remote branch dev from origin.
Switched to a new branch 'dev'
$ git branch -vv
* dev    925a9e4 [origin/dev] closes #1,#4
  master 5e1dd3a [origin/master] Merge pull request #5
$

origin/dev からdevが作成され、--trackオプションにより、追跡の設定も自動で行われていることが確認できました。

つぎに、ためしにローカルブランチからブランチさせてみます。ローカルのブランチからブランチを作成する場合、この場合は自動で追跡ブランチは作成されないため、、、、

$ git checkout  -b dev2 dev   ← ローカルのdevから、dev2ブランチを作成
Switched to a new branch 'dev2'
$ git branch -vv
  dev    925a9e4 [origin/dev] closes #1,#4
* dev2   925a9e4 closes #1,#4          ←追跡ブランチを表示するカッコがない
  master 5e1dd3a [origin/master] Merge pull request #5
$

ようするに、dev2は追跡ブランチが存在しないことが確認出来きます。ややこしいのですが、リモートのブランチ origin/dev からブランチを--trackオプションで同名ブランチを作成する場合*1は、自動で追跡ブランチが設定されますが、ローカルからブランチする場合は、追跡ブランチは設定されない、という事が分かります。

ちなみに、追跡ブランチが存在しない、この状態でpushすると、、、、、

$ git push origin dev2
Total 0 (delta 0), reused 0 (delta 0)
To https://github.com/xxxx/helloworld.git
 * [new branch]      dev2 -> dev2
$

追跡ブランチが存在しないローカルブランチは、サーバにブランチを作成することが分かりました。

リモートブランチdevから別名でブランチして、んでコミットをプッシュしたら、別名のブランチが作られるかdevにプッシュされるかってはなしになって、ブランチの切り方で挙動が変わることがわかり、あらためて整理したのでした。

Git - リモートブランチ

ブランチ作成いろいろ

$ git checkout --track origin/dev    <- devを作成、元は origin/dev で origin/dev を追跡状態
$ git branch -vv
* dev    925a9e4 [origin/dev] closes #1,#4
  master 5e1dd3a [origin/master] Merge pull request #5
$ git checkout  -b dev2 dev    <- dev2を作成、元は dev なので、追跡はナシ
Switched to a new branch 'dev2'
$ git branch -vv
  dev    925a9e4 [origin/dev] closes #1,#4
* dev2   925a9e4 closes #1,#4        ←追跡なし
  master 5e1dd3a [origin/master] Merge pull request #5
$ git checkout  -b dev3    ←いまいるローカルブランチ(dev2) を元にdev3を作成
Switched to a new branch 'dev3'
$ git branch -vv
  dev    925a9e4 [origin/dev] closes #1,#4
  dev2   925a9e4 closes #1,#4
* dev3   925a9e4 closes #1,#4   ←当然追跡なし
  master 5e1dd3a [origin/master] Merge pull request #5
 $ git log --decorate --oneline
925a9e4 (HEAD -> dev3, origin/dev, dev2, dev) closes #1,#4    ←わかりにくいけど、dev2から作られている

コミットを一つにまとめる

$ git log --decorate --oneline
050ea7f (HEAD -> master) 005
1d71318 004
cfb0c7a 003
608528b 002
a4431df 001

003,004のコミットを一つにしたい場合。

$ git rebase -i 608528b   ←1つにしたいコミットの、一個前を指定。

エディタが開きます

 pick cfb0c7a 003
 pick 1d71318 004
 pick 050ea7f 005

これを

 pick cfb0c7a 003
 squash 1d71318 004   ←うえのコミットにまとめるの意味。
 pick 050ea7f 005

に書き換えて保存します。すると、もいちどコミットメッセージを入れる画面が開くので、メッセージを記載して再度保存します。

[detached HEAD f9f948f] 003 + 004
 Date: Wed Dec 21 13:19:43 2016 +0900
 1 file changed, 2 insertions(+)
Successfully rebased and updated refs/heads/master.
$ git log --decorate --oneline
6fb9004 (HEAD -> master) 005
f9f948f 003 + 004
608528b 002
a4431df 001

コミットが一つに書き換えられました。書き換えた場所以降のコミットも、新たなコミットの扱いになってますね。

 pick cfb0c7a 003
 squash 1d71318 004
 squash 050ea7f 005 

など複数指定することもできます。直前のコミットにまとめる、という意味なのでこの場合は004,005のコミットを003にまとめることになります。

環境によっては

Could not execute editor

というエラーが出る場合があります。そんなときは.gitconfigにエディタの情報を追記しておきます。

$ cat ~/.gitconfig
...
...
[core]
	editor = /usr/bin/vim

リビジョン番号の確認、HEADの位置の確認

$ git checkout master
$ git log --oneline --decorate
09a6a5a (HEAD -> master, dev3, dev) dev commit
9210c21 dev commit
3fc335e dev commit
0e46a27 (dev6, dev5, dev4, dev2) dev2 commit
e97cefa dev2 commit
c39d327 dev2 commit
366da11 master commit

派生元を指定してBranch作成

$ git branch dev_dest dev_source 
$ git checkout -b dev_dest dev_source    <-作成 & 移動

dev_sourceのリビジョンを元に、dev_destブランチを作成します。

リビジョン番号からBranch

$ git show dev4
commit 0e46a2730ab69f1a270ce92bee88fc9eda97538a
... 略
$ git checkout -b dev_dest 0e46a2730ab69f1a270ce92bee88fc9eda97538a

枝分かれのブランチっても、作成した瞬間はおなじ状態です。

$ git show dev4
commit 0e46a2730ab69f1a270ce92bee88fc9eda97538a
..
$ git show dev_dest
commit 0e46a2730ab69f1a270ce92bee88fc9eda97538a
..

単なる別名って感じでしょうか。

コミットをまとめる

dev_#35_spike でチマチマコミットしていた内容を dev_#35 へまとめる対応

# git checkout dev_#35  <- チケット番号のイメージ
# git merge --squash dev_#35_spike

違う名前のリモートブランチにプッシュする

> git checkout -b dev-spike
> git branch -a
* dev-spike
  master
  remotes/origin/HEAD -> origin/master
  remotes/origin/master

> git push origin dev-spike:dev-spike1
To https://github.com/masatomix/hello.git
 * [new branch]      dev-spike -> dev-spike1

addしないでコミット

git commit -a

リモートのブランチの削除

Githubのブランチ削除 - Qiita

ローカルのブランチの削除

> git branch
* dev-spike
  master

> git checkout master
Switched to branch 'master'
Your branch is up-to-date with 'origin/master'.

> git branch -d dev-spike
Deleted branch dev-spike (was c5776c5).

> git branch
* master

消えました

4. ブランチを削除する【チュートリアル1 ブランチを使ってみよう】 | サルでもわかるGit入門 〜バージョン管理を使いこなそう〜 | どこでもプロジェクト管理バックログ

GitHubのページに出てた、Gitのコマンド(Get Startedみたいなヤツ)。。

touch README.md 
git init //ローカルリポジトリの初期化
git add README.md //ローカルへ追加
git commit -m "first commit"  //ローカルへコミット
git remote add origin https://github.com/masatomix/Hello-World.git //既に存在するリモートのリポジトリに、origin って名前をつける
git push -u origin master //リモートリポジトリにローカルの情報を反映

こんな意味って感じ?

コマンド基本

リポジトリからマスターをClone

git clone https://github.com/masatomix/ui-router-sample.git     ←URLは例
cd  ui-router-sample

Branchに切替

git branch   一覧
git branch dev  作成
git checkout dev 切替

いろいろ修正、そのあとコミット

git diff
git commit

コミットされた*2

リポジトリへプッシュ

git push origin dev

ステータスのチェック

git status

差分チェック

git diff

この記事は

選択肢 投票
おもしろかった 0  
そうでもない 0  

Top / GitHub / TIPS集

現在のアクセス:2670


*1 これは、git checkout -b dev3 origin/dev などとローカルブランチ名を指定しながらブランチする場合も同様で自動で追跡される。
*2 not stagedなファイルがあれば -a オプションつける

トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS