これは 個人の 勉強記事です
Git ブランチ管理コマンド
ローカルでの新ブランチ作成、現在のブランチの表示
ファイル操作で言うとmkdir
, ls
参考
[git コマンド branchの作り方]
(https://qiita.com/TetsuTaka/items/5ab227a8bd2cd7106833)
ローカルのリポジトリで
git checkout -b <branchName>
で作成する
(-b
をつけなければ生成されないので、通常の移動先に存在しないブランチを指定したときにうっかり作成されることはない。)
git checkout -b hoge
Switched to a new branch 'hoge'
git branch -a
* hoge
master
remotes/origin/HEAD -> origin/master
remotes/origin/master
これで今コマンドで作成したブランチ無事に作成できていて
私は今そのブランチにいることがわかる.
なお、リモート (GitHub など) でブランチを作成することもできるが
この場合はlocalでgit fetch
しないと反映されない。
そもそもリモートで編集してその変更をローカルで取り込む (fetch) のは今のチームでは非推奨となっている。
ローカルでのブランチ移動
ファイル操作で言うと cd
参考
[【 git checkout 】コマンド(基礎編)――ワークツリーを特定のブランチやコミットに切り替える]
(https://www.atmarkit.co.jp/ait/articles/2004/24/news028.html)
https://qiita.com/sunstripe2011/items/53ae4184d021e927b3
(https://qiita.com/sunstripe2011 さんの削除された記事)
ブランチを移動する場合は
git checkout <branchname>
で移動できる。
git branch -a
* 20200701-report
hoge
master
remotes/origin/20200702-daily-reoprt
remotes/origin/HEAD -> origin/master
remotes/origin/hoge
remotes/origin/master
現在 20200701-report, hoge, master, のブランチがあるなか
20200701-report にいるのを確認して
git checkout hoge
Switched to branch 'hoge'
Your branch is up to date with 'origin/hoge'.
git branch -a
20200701-report
* hoge
master
remotes/origin/20200702-daily-reoprt
remotes/origin/HEAD -> origin/master
remotes/origin/hoge
remotes/origin/master
hoge ブランチに移動。
もう一度 現在地を確認すると、hoge ブランチにいることが再確認できた。
こうして、
20200701-report のブランチにいる状態から
git checkout hoge
を使うことで
hoge のブランチに移動できることが確認できた
ローカルブランチ名の変更
参考
https://linuxize.com/post/how-to-rename-local-and-remote-git-branch/
Rename the local branch by typing:
git branch -m <new_name>
- 現在のブランチの名前はbranch -m で変更できる
ローカルブランチの削除
ファイル操作で言うと rm -f
参考
[How can I delete branches in Git?]
(https://www.git-tower.com/learn/git/faq/delete-remote-branch)
ローカルのブランチを削除したい場合は
git branch -d <branchName>
で削除することができる。
git branch
20200707-daily-report
* 20200708-daily-report
hoge
master
現在 20200708-daily-report ブランチにいることを確認。
hoge はテスト用のブランチなので削除したい。
git branch -d hoge
Deleted branch hoge (was 043aab3).
これで ブランチ hoge が削除できた。
削除したブランチの16進数の id も確認できる
git はコミットもブランチも16進数の id がついている
git branch -d test0709
error: Cannot delete branch 'test0709' checked out at '/your/directory/kaede0902-daily-report'
なお、今いるブランチは そこから checkout しないと削除できない。
ホテルに人が泊まって(check in して)いたら解体出来ないみたいなことだ。
git branch -d test0709
error: The branch 'test0709' is not fully merged.
If you are sure you want to delete it, run 'git branch -D test0709'.
また、リモートで PR が pending で merge されていない段階で、ローカルのブランチを削除しようとすると警告が出る。
GitHub (リモート)側のブランチの削除
参考
[復習 Git: GitHub のブランチを削除する.]
(https://passingloop.tumblr.com/post/18015576208/remove-remote-branches-by-git-push)
CLIでやるのは非常に大変そうだ。
参考
[Creating and deleting branches within your repository]
(https://docs.github.com/en/github/collaborating-with-issues-and-pull-requests/creating-and-deleting-branches-within-your-repository)
しかしGitHubでなら簡単だった。
ブランチの名前が2020... レ「オ」ポートに typo されているから削除する
view all repositoriesのリンクからこれを
こうじゃ!!!
しかもゴミ箱ボタン押してしばらくは restore ができる新設設計.GitHub 愛してます!!
実践例: git による日報ワークフロー
前提
現在、私は練習のために日報を毎日 git コマンドを使って GitHub の日付ごとのブランチに日報を提出することにしています。
ここまでに学んだ git の使い方の実践例として、git を使った私の毎日の日報提出のワークフローをまとめて、
実際にそのフローで上記のコマンドがどう使われているかを紹介しようと思います。
ローカルの master からその日の日報用のブランチを作るところから解説します。
日付は仮に 2020/07/02 として進めます。日報の内容には触れません。
現在地確認
git branch
で 現在のブランチを確認
リモートの master と ローカルの master の一致
git pull origin master
リモート の master を pull ( fetch & merge) してローカルの master をリモートの master の状態と一致させる
[git pull --rebaseをpushする前にやろうという話。]
(https://qiita.com/makua/items/7aa1f4fa02ef9ab1f9d9)
--rebase
をつけるべきとの意見もある。
今日の日報のブランチの作成、移動、記入
git checkout -b 202000702-daily-report
ローカルの master から日報用のブランチを作る
git checkout -b 20200702-daily-report
Switched to a new branch '20200702-daily-report'
作成されて移動できた。
ここで 2020/07/
の 02.md
に日報を記入。
ステージングとコミット
git add .
master から作った枝だから、今作ったもの以外は 入ることがない
git commit
ステージングした日報ファイルを現在のブランチに commit。
正確には この後 vim が開いてコミットメッセージを書く。
この一行目が PR のタイトル
二行目が PR の本文 に反映される(後からも変えられる)
git commit
On branch 20200702-daily-report
nothing to commit, working tree clean
( branch名を教えてくれる)
この日報用ブランチを GitHub に push
ローカルで今自分が checkout しているブランチが hoge なのであれば、
git push origin hoge
origin master への直接 push は原則禁止となっている。
origin に今の commit を新しいブランチごと提出すると
git push origin 20200702-daily-report
Enumerating objects: 4, done.
Counting objects: 100% (4/4), done.
Delta compression using up to 12 threads
Compressing objects: 100% (2/2), done.
Writing objects: 100% (2/2), 373 bytes | 373.00 KiB/s, done.
Total 2 (delta 0), reused 0 (delta 0)
remote:
remote: Create a pull request for '20200702-daily-report' on GitHub by visiting:
remote: https://github.com/your-repository/pull/new/20200702-daily-report
remote:
To github.com:/your-repository/kaede0902-daily-report.git
* [new branch] 20200702-daily-report -> 20200702-daily-report
こうなる。「origin (リモートのこと)に送信したから GitHub から PR 出してね」と教えてくれる。
PR (Pull Request)
これで今 (6 minutes ago) に origin に push したブランチである 20200702-report が確認できたので
compare & pull request
する
ここで コミットメッセージがタイトル、本文に反映されるので、それと PR のタイトル本文を変えたい場合はここで変更する。
現在のチームではこの書き方になっています。この後にレビュワーを指定し、メンションしてレビューをお願いします。
PR を出した後の commit の修正
自分で間違いに気付いたり、レビュワーさんにもらったコメントから出した PR の commit の修正をする場合
単純にそのブランチで作業して commit してpush すれば OK
ただ、history から commit 自体を減らしたいなら PR したブランチをローカルに pull して rebase して push -f しなければならない。とても大変なので注意。
(Git コミット管理コマンドの記事で解説します)
ローカルでの master への復帰と pull
2020/10/11 追記
前述の工程で feature ブランチを push した後、
push された feature ブランチをマージして master ブランチに統合しているのはリモート側のみ
なので feature ブランチを レビュアーが リモート側で マージした後は
自分の ローカル側でも master に戻り、pull して自分のブランチの master のも反映させてから、新しくブランチを切る必要がある。
コマンドだと
git push origin YOUR_FEATURE_BRANCH
Writing objects: 100% (5/5), 471 bytes | 471.00 KiB/s, done.
remote:
To github.com:kaede0902/easy-biz-email.git
* [new branch] head -> YOUR_FEATURE_BRANCH
これで feature ブランチを push して、レビュアーに master ブランチにマージしてもらった後に
git checkout master
Switched to branch 'master'
git pull origin master
remote: Enumerating objects: 1, done.
これでローカルの master に戻って origin から 自分の commit の PR がマージされた master ブランチの内容を
自分の master ブランチにも反映させる必要がある。
レビュアーの PR のマージが遅くなる場合は、コンフリクトが起きないように PR 承認待ちの作業と衝突しない箇所を作業するブランチを作る必要がある。
以上。