今更ながら、githubの使い方を再度確認しようと思い、自分なりにまとめてみました。
Contents
リモートリポジトリの作成
左上のgithubのロゴマークをクリックして、以下のような画面が出てくるので、
緑ボタンの「New」をクリックする。
そして作成したいリモートリポジトリ名を入力し、
誰でもアクセスできるリポジトリにしたいのであれば、Publicに、
自分だけがアクセスできる(権限付与で他ユーザーも)ようにしたいのであれば、Private
にチェックを入れて作成する。
サーバなどからgithubのリモートリポジトリに接続できるようにする
git
user_name: ユーザーID(ログインする際に必要なユーザーID)
password: githubの自身のアクセストークン(※ ログインする際のパスワードではない)
これでサーバやローカルからgithubへアクセスできるような環境が作成された。
今後はgitのコマンドで自由に操作していくことができます。
ブランチの作成
GUIでの作成
普通にリモートリポジトリの以下のところでor create branchとあるのでここから作成できる。
まだないブランチ名を入力するとブラント作成ができる。
そしてどこからブランチを作成するかを指定する。下のものだとfrom masterとあるので、masterブランチから作成する。
今回は
masterブランチの画面で作成したので、from masterで作成されるが、
別ブランチからまた別のブランチを作成したい場合は、
その作成元のブランチの画面を表示した上で、上記のやり方で作成しようとするとfrom developで作成される。
コマンドでの作成
ローカルからブランチへのcommit&push
以下順に実行。
コマンド | 説明 |
---|---|
git pull origin master | push先がmasterなら、他の最新コミット履歴(最新バージョン)をローカルに反映する必要があるので、pullする |
git commit -m "コミット名" | 現在のローカルでの変更箇所/差分をコミットすることで確定させる。 |
git add . | 今回コミットした内容をローカルリポジトリに反映する。ローカリリポジトリにはあくまでコミット履歴(バージョン)が保存される。 |
git push https://github.com/githubアカウント名/リモートリポジトリ名 | 指定したリモートリポジトリにローカルリポジトリのコミット情報を連携して、確定した変更箇所を反映する このコマンドはmasterにpushする前提だが、もしdevelopなどデフォルトとは違うブランチにpushしたい場合は、git push -d ブランチ名で可能。 |
現状の2つのブランチの差分チェック
https://github.com/DentsuDigitalDT/boy/compare/master...boy-topgate-7
https://github.com/<組織アカウント名>/<リモートリポジトリ名>/compare/<比較したいブランチ名1>...<比較したいブランチ名2>
それか上の、pull request作成のところで、
pull request → 比較ブランチを2つ選択してnew pull requestをすると、比較が表示される。ここのURLが/compare/branch1...branch2
プルリクエストの作成
pull requestとは、
あるブランチから別のブランチへマージして!という依頼をするもの。
開発メンバーとかではなく、別のgithub管理者メンバーに確認をしてもらってマージをしてもらうなどで利用する。
以下で上のpull requestをクリック。そして右の緑ボタンのnew pull requestをクリック
そうすると自動的に以下のように2つのbranchの比較が表示される。
master ← developとした場合は、master起点でdevelopの方にあるものは+、ないものは-で表示される。
※ 「✔ Able to merge. These branches can be automatically merged.」と表示されている場合は、コンフリクトが起きていない状況で、そのままpull requestをしてメンバーはマージをすることができます。
※ しかし、「× Can’t automatically merge. Don’t worry, you can still create the pull request.」の場合はコンフリクトしている状態なので、この状態でpull requestをすると受け取ったメンバーがマージをする際に、そのコンフリクトを修正しない限りマージをすることができません。
pull request受け取った側でマージを行う
以下でpull requestを開くと、pull requestのリスト一覧が表示される。それをクリックする
そうすると中身をかくにんすることができる。
commitタブでは、マージする前のdevelopブランチに入っているcommitの一覧を見ることができ、
file changesタブでは、masterにマージするので、masterとの差分があるファイルの中身を見ることができる。
それらを確認した上で、
merge pull request
をクリックして、confirm mergeをすると以下のように自動的にmergeされます。
masterブランチを見るとファイルが追加されているのが確認できます。
プルリクエストを戻す
間違ってプルリクエストでマージをしてしまった場合、それを取り消したい場合がある。
そればrevertで可能。
pull requestから、以下の赤枠のcloseをクリック
過去のpull request一覧が見れるので、そこから取り消したいpull requestを選択する。今回は赤枠
revertをクリックするとすぐ戻せるわけではなく、
戻す用のpull requestを作成して、mergeすることで戻すことになる。
revertする予定のpull requestでマージする前の状態に戻すので、その状態のもののブランチが作成されて、そのブランチの中身をmasterにmergeすることで、revertをするというイメージ。
実際に以下のようにrevertをすると、以下のようなブランチが作成される。
そしてrevertするボタンをクリックすると、以下のように
master ← 新ブランチのpull requestを作成するボタンが表示されるので、それを作成する。
そして今まで通り、merge pull requestクリックして、confirm mergeをクリックすると、
masterにmergeされて、pull requestが解除されるのが確認できる。
コンフリクトが起きた場合
pull requestの段階でauto マージングができない場合
どちらのcommit(変更/修正確定)が正しいかわからない。
developを直接修正してコミット(最新バージョン101)
でdevelopから当時の最新バージョンであった100のものを、developAに作成していて、それを修正していて
コミット。(最新101?)
でpushするとコンフリクトになる。
リモートリポジトリからのclone
git clone リモートリポジトリ
git clone -b ブランチ名 https://リポジトリのアドレス
git clone -b ブランチ名 https://github.com/yoshida-1992/bug-free-lamp
そして作業を行う。
修正や追加。
そのあと、
git add . でローカルリポジトりに入れる
git commit -m <コミット名> でローカルリポジトりで確定
git push origin develop でdevelopにアップする
checkout
.gitフォルダがあるところから下がGitの管理下フォルダ
.gitがある配下のどこでも、git add .やgit commitすると、そのコマンドを打ったところからより上位のフォルダに登っていき、初めて.gitフォルダが確認されたところからその配下がコミット対象になります。
そしてその配下でgitコマンドをした場合、git origin masterなどのプッシュ先情報は.gitに保存されている。
なので別の.git配下でgitコマンドをやったら自動的にpush先やpull先を変えてくれる。.gitフォルダでそれらの情報を管理している。
だから必ずプロジェクトを作ったら、そのトップでgit initで.gitフォルダを作成する必要がある。
もししていない場合、
例えば、
フォルダ
∟.git
∟Aプロジェクト
∟.git
∟Bプロジェクト
という構成の時、新規でBプロジェクトを立てて、そこでBプロジェクトをgithubへpushしたく、Bプロジェクトのトップフォルダでgit add .やgit commitすると、Bプロジェクトには.git管理していないので、その上のyoshida-testでは.gitフォルダがあるので、yoshida-testまでをみてコミットしてしまうので、別プロジェクトまで巻き込んでコミットしてしまいます。
Github Action
こちらを参照してください
クライアントツール
コマンドで取得していきましたが、
GUIで操作したい場合はmacであればsource treeというツール、
windowsであればtortoise gitがおすすめ