Help us understand the problem. What is going on with this article?

[Git] 基礎 ~master反映まで~

More than 1 year has passed since last update.

過去にSVNから移行した際のアウトプット/メモ。変な個所がありましたら、ご指摘いただけますと幸いです

Gitとは。

分散型バージョン管理システム。ブロックを色んなところで組み立てて、タワーに積み上げるイメージ。
対比として、中央集権型バージョン管理システムのSVNが挙げられる。

まずは大まかなイメージ図

登場するのは大きく分けてこの3つ。

・作業ブランチ
・リモート追跡ブランチ
・リモートブランチ

作業ブランチとリモート追跡ブランチを合わせた領域がローカルブランチ。

作業ブランチ

メンバー各々が開発を進めていく個人スペースで、機能毎に作業ブランチを作成してコーディングし、リモートブランチにpushしていく。別名だと追跡ブランチ(tracking branch)。

リモート追跡ブランチ

作業ブランチとリモートブランチの間に存在するブランチ。(上図参照)
作業ブランチとリモートブランチは直接のやり取りはせず、リモート追跡ブランチを介してやり取りをする。
git fetchした時に更新される。少しややこしい。

リモートブランチ

みんなで共有しているブランチ。git pushしない限り変更されない。
逆に言うと、リモートブランチにpushするとみんなに影響出ちゃう可能性があるので注意。

既存リポジトリのclone

$ git clone [url]

これだけ。

実務フロー

エディター上でも操作は可能だが、コマンドラインでの操作方法を記述

案件で機能追加が発生した場合

①作業ブランチを作成

②リモートブランチにpush

③masterブランチへmerge

①作業ブランチを作成

作業ブランチ作成。
※この時に最新のmasterから生やすように注意!

$ git branch ブランチ名

参照するブランチを切替

$ git checkout ブランチ名
Switched to branch 'hoge_branch'

ブランチ一覧&参照ブランチ確認

$ git branch -a
* hoge_branch   現在参照されているブランチ
 master           ローカルのmasterブランチ
 remotes/origin/master  リモート追跡ブランチのmasterブランチ

②リモートブランチにpush

開発が一段落したらソースをステージしてcommitしてpushする。(パルスのファルシのルシがパージでコクーン感)

ステージとは、commit予定のファイル一覧リスト,もしくは追加すること。このリストをHEADにcommitする。この時点では、リモートブランチに影響は出ない、言い換えるとローカル内でリモートに反映する準備をしただけ。SVN利用者は勘違いしやすい。

一応、差分が無いかstatusを確認する。差分が無ければ次へ。

$ git status

ソースをステージする。(索引に追加)

$ git add ファイル1 ファイル2 ...

~その他~
$ git add .     //すべてのファイル・ディレクトリ
$ git add *.css //すべてのCSSファイル
$ git add -n    //追加されるファイルを調べる
$ git add -u    //変更されたファイルを追加する

HEADにcommitする。

$ git commit
もしくは
$ git commit -a -m "任意のコメント"  //コミット (-aオプションは変更を自動検出してくれる

リモートブランチにpush。(ここで外部に更新内容が反映される)

$ git push origin ブランチ名  

その他コマンド

・HEADにcommitしたのを取り消したい

$ git reset --soft HEAD~2   #最新のコミットから2件分をワークディレクトリの内容を保持し取り消す
$ git reset --hard HEAD~2   #最新のコミットから2件分のワークディレクトリの内容とコミットを取り消す

追記
$ git reset --soft @~  #これでもいける。HEADと@は同じ意味

・commitメッセージを修正したい

$ git log
編集...

完了。

$ git commit --amend

複数修正したい場合

$ git rebase -i HEAD~2   #HEADから2件のコミットメッセージを表示

Viエディタ起動

pick commitId メッセージ // 2件目
pick commitId メッセージ // 1件目(最新)
.
.
.

上記の「pick」を「edit」に書き換えて保存してrebaseする。rebase危ないので用法用量を守って正しくお使いください。

$ git rebase --continue

③masterブランチへmerge

ローカルmasterブランチとリモートmasterブランチの差分を確認

$ git checkout master
$ git status

今度は機能追加で作成した作業ブランチとローカルmasterブランチの差分を確認。

$ git diff --name-status master hoge_branch

差分があったら、取り込む。

$ git fetch                #リモートの更新内容を取得
$ git merge origin/master  #取得した更新内容をローカルに反映

ローカルmasterブランチへ作業ブランチの内容を取り込む。

$ git merge master hoge_branch

リモートmasterブランチにpush

$ git push origin master:master

不要になったブランチ削除

機能毎にブランチをたくさん作成するので、こまめに消そうね。

作業ブランチ削除

$ git branch --delete ブランチ名

リモートブランチ削除

$ git push --delete origin foo
もしくは
$ git push origin :foo

参照

Subversionを使用し続けているプロジェクトがGitに移行することを考えてみた
【Git】基本コマンド
Gitコマンド一覧
Git 基本の用語集
git rebase についてまとめてみた
Git で不要になったローカルブランチ・リモートブランチを削除する方法

hikaru_
アウトプット、メモ用です。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away