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移行とかも挑戦できそう。

今後②

記事も定期的に書いていきたいですね。
拙い文章でしたが、お読みいただいた方(いるのかな…)ありがとうございます。