$ 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 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
$ 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
$ git branch dev_dest dev_source $ git checkout -b dev_dest dev_source <-作成 & 移動
dev_sourceのリビジョンを元に、dev_destブランチを作成します。
$ 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
git commit -a
> 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入門 〜バージョン管理を使いこなそう〜 | どこでもプロジェクト管理バックログ
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
この記事は
現在のアクセス:2670