1.初級編 基本的な用語とコマンド

基本用語

用語 説明(イメージ)
ブランチ 枝。大元の枝から切り分けることで、作業ごとまたは作業人ごとで、複数の作業や履歴を並列に管理できる
レポジトリ 履歴管理を行う場所
クローン(clone) ダウンロードのイメージ。リモートのレポジトリをそのまま全てローカルに持ってくること
アド(add) コミットする前に仮にセーブするイメージ。addしないとコミットできない
コミット(commit) 変更対象をセーブするイメージ。コミットは全て履歴として残る
プッシュ(push) アップロードに近いイメージ。ローカルでコミットしたものをリモートにあげること
プル(pull) リモートリポジトリの最新状態をローカルリポジトリに反映させる。ダウンロードのイメージだが、cloneとは違いpullはすでにローカルにリポジトリがある状態(clone済みの状態)でしか行えない

基本コマンド

git clone git@github.com:〜 or https://github.com/〜

リモートのレポジトリをクローンしてきます。

git checkout 存在しているブランチ名

ローカルに存在しているブランチに切り替えます

git checkout -b 新しいブランチ名

現在のブランチから新しくブランチを作成します。

git add 作業パス(変更したファイル)

変更したファイルをcommitする前に取り込みます。(仮にセーブするイメージ)

変更したファイルのパスがわからない場合が、git status で確認できます。
全部addしたいときなどによく使うのは、git add . です。

取り消す際は、git reset HEAD 作業パス(変更したファイル) で取り消せます。
ファイルの内容は元のままなので、せっかくここまでやったのに消えてしまうという心配も不要です。

git commit

addしてある箇所をコミットします。
セーブに近いイメージです。セーブに履歴を付けれることがgitの特徴でしょうか。

git commit -m "コメント"

これだとvimを開かないで済みます。

git commit -m "コメント" -m "コメント"

と2行以上書くことも可能です。

git push origin hoge(pushしたいブランチ名)

プッシュします。これによりローカルからリモートにコミットが反映されます。
アップロードに近いイメージです。

git status

git addがきちんとされているか否かも確認できます。

git revert コミット番号

コミット履歴は残しつつ、あくまでコミットによる変更のみを打ち消すコマンドです。
コミット番号については、git log で調べられます。

git pull origin ローカルブランチ名

リモートの最新状態を取得します。

origin とは何か

レポジトリの場所(URL)の別名です。
最初にcloneしたときに、設定されます。

git config --list で確認できます。

2.中級編 やりたいことから逆引き

リモートで特定のブランチをクローンしてくる方法

git clone -b リモートで落としたいブランチ名 https://github.com/〜

-b でリモートのブランチ名を指定することがポイント

強制的にローカルブランチをリモートブランチに合わせる

git fetch origin
git reset --hard origin/master(現在のブランチ名)

リモートの最新の状態をもってくることができる。
ローカルとリモートの整合性が取れなくなった時に使うと良いと思います。
もしくは一度ローカルブランチを削除して、リモートブランチを持ってくるかです。

リモートブランチを持ってくる

まずはリモートにあるブランチの情報を取得して表示する

git fetch (リモートブランチの最新の情報を取得)
git branch -a (ローカルブランチとリモートブランチの一覧を表示)
git branch -a
* master
  remotes/origin/master
  remotes/origin/hoge_branch

上記で、remotes/origin/hoge_branchをリモートからもってきて、ローカルでhoge_branchとして作業する場合に下記のようなコマンドを打つ

git checkout -b hoge_branch origin/hoge_branch

3.上級編

既存ブランチは残しつつ、全く新しく0からのブランチを作る

まずはローカルにディレクトリを作成

$ mkdir hogeDir
$ cd hogeDir/

作成したディレクトリ内でinitし、リモートのレポジトリを持ってくる

$ git init
Initialized empty Git repository in /Users/user_name_hoge/hogeDir/.git/
$
$ git remote add origin git@github.com:hogehoge/hogehoge.git
$
$ git status
On branch master

Initial commit

nothing to commit (create/copy files and use "git add" to track)

マスターからブランチを切って新しいブランチを作成し、

ファーストコミット、プッシュまでを行う

$ git checkout -b hoge_branch
Switched to a new branch 'hoge_branch'
$
$ vi README.md
$ git add .
$ git commit -m "First commit" -m "READMEファイル作成"
[hogeDir (root-commit) 26tey74] First commit
 1 file changed, 11 insertions(+)
 create mode 100644 README.md
$
$ git push origin hoge_branch
Counting objects: 3, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 521 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To git@github.com:hogehoge/hogehoge.git
 * [new branch]      hoge_branch -> hoge_branch
$

これでリモートに全く新しいブランチ『hoge_branch』ができました。
このブランチをデフォブランチ(リモートで設定可能)に設定すると、他のブランチに手をつけず、作業をすることができます。

異なるレポジトリから差分をコピーして持ってくる

まずはAAAレポジトリをクローンする

git clone git@github.com:hoge/AAA.git
cd AAA

確認する

git config --list

(中略)
remote.origin.url=git@github.com:hoge/AAA.git
remote.origin.fetch=+refs/heads/*:refs/remotes/origin/*
branch.master.remote=origin
branch.master.merge=refs/heads/master

コピーしてきたいBBBのレポジトリを登録する

※作業ディレクトリは変更しなくてよい

git remote add BBB git@github.com:hoge/BBB.git

※BBBの名前は何でも良い、この後呼び出すのに使います。

確認する

git config --list

中略
remote.origin.url=git@github.com:hoge/AAA.git
remote.origin.fetch=+refs/heads/*:refs/remotes/origin/*
branch.master.remote=origin
branch.master.merge=refs/heads/master
remote.BBB.url=git@github.com:hoge/BBB.git
remote.BBB.fetch=+refs/heads/*:refs/remotes/BBB/*

BBBレポジトリのブランチ情報を取得

remoteのレポジトリを登録した後に、必ずfetchしてあげることがポイントです。
これをしないとBBBレポジトリのブランチを指定できません。

git fetch BBB

これにより、BBBのレポジトリのブランチの情報が取得できる。

確認する

$ git branch -a
* master
  remotes/BBB/hogehoge
  remotes/BBB/error-fix
  remotes/BBB/fix-sass
  remotes/BBB/master
  remotes/origin/hogehoge
  remotes/origin/HEAD -> origin/master
  remotes/origin/hogetest
  remotes/origin/master

リモートのレポジトリを指定して、AAAのローカルブランチにマージする

git merge BBB/master

※現在作業中のブランチにマージされるため、masterから切ったブランチにマージして、pushしてリモートで差分を確認するのが良いと思います。

二回目以降に上記作業を行うケース

一度remoteでaddしてあれば、下記だけでいつでもコピーや差分が取り込めます。

git checkout master
git pull (AAAレポジトリの最新の状態を持ってくる)
git checkout -b AAA_2018xxxx (BBBをマージするためブランチを切っておく)
git fetch BBB (BBBレポジトリの最新のブランチを取得)
git merge BBB/master (AAA_2018xxxxへBBBレポジトリのmasterブランチをマージ)
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account log in.