git-itを使って、gitとGithubの操作方法を学習してみました
初めまして
ブログ初投稿です。
SEになり3年が経って、アウトプットを継続的にやってみようと思い、その一環としてブログを始めました。
初回は今更ながらgitの操作方法を学んでみたので、その備忘録の投稿です。
gitの勉強にはgit-itを活用しました。
また、markdownにも慣れておきたかったため、記事はmarkdownで書くつもりです。
使い方おかしいなどのご指摘あれば、コメントいただけると幸いです。
ローカルリポジトリの作成
git init
ステージに登録する
git add <作業したファイル>
ファイルのステータスについて
gitのリファレンス-変更内容の記録 より抜粋
作業コピー内の各ファイルには 追跡されている(tracked) ものと 追跡されてない(untracked) ものの二通りがあることを知っておきましょう。追跡されている ファイルとは、直近のスナップショットに存在したファイルのことです。これらのファイルについては変更されていない(unmodified)」「変更されている(modified)」「ステージされている(staged)」の三つの状態があります。追跡されていないファイルは、そのどれでもありません。
差分を見る
git diff
コミットする
git commit -m "コメント"
-m
コメントの挿入
-a
変更のあったファイル全て
状態を確認
git status
リポジトリのステータスとステージの状態を表示。
設定を確認
git config --list
githubユーザーとの紐付け
git config --global user.username <USERNAME>
remoteサーバーを登録する
git remote add <REMOTENAME> <URLFROMGITHUB>
メインのremoteサーバーはorigin
というREMOTENAMEをつけるのが慣習。
これでローカルリポジトリはGitHub上にあるremoteをoriginという名前で探しに行くことができる。エイリアス的なこと。
remoteの確認
git remote
-v
名前に対応するURLも表示される
remoteへのpush
git push <REMOTENAME> <BRANCH>
最初のブランチはデフォルトではmaster
というブランチ名が付けられている。
プロジェクトをPush/Pullするときには、Gitに対象となるブランチ名とremoteの名前を伝えておく必要があり。
上記までの流れを汲むと、masterという名前のブランチを、originという名前のGitHub上にあるremoteに送信している。
forkしてcloneする
git clone <URLFROMGITHUB>
github上で他の人のリポジトリを自分のアカウントの下にコピーを作る。これがfork
fork後そのリポジトリをclone
するとローカルで作業できる。
この流れがgitの肝。
ちなみに、自動的にoriginというREMOTENAMEが登録される。
fork元のリポジトリの変更もpullできるようにする
git remote add <REMOTENAME> <URLFROMGITHUB>
cloneしてきたリポジトリをに対し、元のリポジトリの流れも追っておきたい場合にはremoteを追加する。
元のリポジトリはupstream
とREMOTENAMEをつけるのが慣習。
cloneしてきたものの・・・
cloneさせるブランチって選べるの?
branchを作る
git branch <BRANCHNAME>
git branch
で一覧表示。
-m <NEWBRANCHNAME>
リネーム。
branchを消す
-d <BRANCHNAME>
削除。
メインブランチから、自分の作業用ブランチとして、フィーチャーブランチ
と呼ばれるものを作るのが一般的。
最終的には、フィーチャーからプルリクして成功したら、フィーチャーからメインブランチにその結果をマージして、フィーチャーブランチは消すという開発フロー?
git push <REMOTENAME> --delete <BRANCHNAME>
ローカルを消したらリモートのブランチ(github上)も消す必要がある。
branchの切り替え
git checkout <BRANCHNAME>
ちなみに、git checkout -b <BRANCHNAME>
で作成も、切り替えもできる。
変更をチェックインするには
該当のブランチに切り替えた後は、addしてcommitしてpushする。これでチェックイン。
もちろんこのpush先は REMOTENAME:origin, BRANCHNAME:新しく作ったブランチ名
ブランチ名が競合したらどうなるのか?と思ったけど、そもそも自分のリポジトリにpushするのだから全然問題じゃない。
しかも、本流に取り入れてもらうなら、プルリクして受け入れてもらわないといけないよね。
変更をPullする
git pull <REMOTENAME> <BRANCHNAME>
pullする前に、変更部分を見る
git fetch --dry-run
Collaborators
プロジェクトには共同作業者であるCollaboratorsを、Github上で追加することができる。
Collaboratorsはプロジェクトに対して自由にコミットできる。
競合も発生するので、上記fetchは大事。
本流にプルリクする
いよいよプルリク。この操作もGithub上で行う。
自分のプロジェクトのトップに「compare&pull request」ボタンがあるので、押下。
fork元のプロジェクトに遷移し、プルリク作成画面が表示されるので、head fork
にcloneした自分のプロジェクト、compare
に自分が作ったbranchを選ぶ。(正しく作ってあれば、この辺は自動的に表示されているはずである)
元branchとの差分も表示されるので、確認した後コメントを作成しプルリク!
(contribution documentation
があれば、オーナーがコントリビュートする際のポリシーを記載しているので、あらかじめ読むこと。)
プルリクコメントのガイドライン
プルリクのガイドラインもちゃんとある。
指定したブランチを今いるブランチにマージする
git merge <BRANCHNAME>
プルリクに成功したら、フォークしたメインブランチにフィーチャーブランチからマージしておきたい。
今後
学んだ内容は以上です。
せっかく学んだので、OSSの適当なリポジトリforkしてみて開発とかやってみたいですね。社内で使っているSVNをgit移行とかも挑戦できそう。
今後②
記事も定期的に書いていきたいですね。
拙い文章でしたが、お読みいただいた方(いるのかな…)ありがとうございます。