Skip to content

Instantly share code, notes, and snippets.

@tkd55
Last active March 31, 2016 02:50
Show Gist options
  • Save tkd55/cf65840c71bcd25c88ab to your computer and use it in GitHub Desktop.
Save tkd55/cf65840c71bcd25c88ab to your computer and use it in GitHub Desktop.
Git勉強会

Git勉強会

概念

git の4つの状態

  1. 作業ツリー ローカルレポジトリ上にある現在の作業ファイル 作業ツリーの変更点はaddによりインデックスに追加

  2. インデックス(ワーキングツリー) ローカルレポジトリへ反映する変更を一時的に貯めておく領域 インデックスの内容はcommitでローカルレポジトリに反映

  3. リポジトリ

  4. ローカルレポジトリ 作業者のマシン上にあるレポジトリ ローカルマシンでの作業内容が保存される pushにより共有レポジトリに反映される

  5. リモート(共有)レポジトリ 共有するレポジトリで、サーバー上にあるリポジトリ 開発者はここにあるソースをpull / fetch で取り込む

git コマンド

ユーザー情報の設定について(グローバル)

ユーザ名の確認

$ git config --global user.name

E-mailアドレスの確認

$ git config --global user.name

ユーザ名の設定

$ git config --global user.name "ユーザー名"

E-mailアドレスの設定

$ git config --global user.name "E-mailアドレス"

設定ファイルで確認したい場合は次の実行

$ less ~/.gitconfig

ユーザー情報の設定について(ローカル(プロジェクト単位))

ユーザ名の確認

$ git config user.name

E-mailアドレスの確認

$ git config user.name

ユーザ名の設定

$ git config user.name "ユーザー名"

E-mailアドレスの設定

$ git config user.name "E-mailアドレス"

設定ファイルで確認したい場合は次の実行

$ less ~/<プロジェクトフォルダまでのパス>/.git/config

ファイル操作

変更ファイルの破棄(作業ツリーからの破棄)

$ git checkout <変更内容を破棄するファイル名>

// まとめて破棄する場合はカレントディレクトリを指す
$ git checkout .

作業ツリーのファイルをindexに追加

$ git add <追加するファイル名> 

addの取り消し

$ git reset HEAD myfile.txt 

作業ツリーに追加したファイルをローカルレポジトリにcommit

$ git commit -m "コミットメッセージ" 

直前commitの取り消し

$ git reset --soft HEAD^

※ 実際には取り消しではなく、状態を戻している。 ※ softオプションは変更がindexに追加されている状態にする。

2つ前のcommitの取り消し

$ git reset --soft HEAD^^

※2つ前を取り消すと、もちろん1つ前のコミットも取り消される。

コミットを取り消して、指定の位置まで戻りたい

$ git reset <コミットID>

指定したコミットまで、全ての更新をなかったことにする

$ git reset --hard <コミットID>

※ hardオプションは変更した内容も破棄される。(修正もしていない状態になる)

リモートブランチにローカルブランチの内容を反映

$ git push origin <反映したブランチ名>

状態の確認

$ git status

commitログの確認

$ git log
commit 766296f12951d71f331a91eb614ef0eac074e93b
Author: tkd55 <takeda@cshool.jp>
Date:   Tue Feb 4 15:41:22 2014 +0900

    first Commit

差分の確認

ワーキングツリーとインデックスの差分

$ git diff

HEAD とインデックスの差分

$ git diff --cached

HEADとワーキングツリーの差分

$ git diff HEAD

ブランチ関連

ブランチの作成

$ git branch <作成するブランチ名>

ブランチの確認

$ git branch

ブランチの移動

$ git checkout <移動先のブランチ名>

ブランチを新規作成し、そのブランチへ移動

$ git checkout -b <新規ブランチ名>

リモートブランチに反映

$ git push origin <ブランチ名>

リモートブランチからmaster以外のブランチをローカルに新規に取得

例. リモートリポジトリ上で master / develop / hoge.. など色々なブランチで運用している場合、新規メンバはcloneしてくるだけでは、通常masterしか存在してないのです。 そこで、開発用developブランチに切り替えたいという時は、こんな感じで。

$ git fetch
$ git branch -a
* git_command
  master
  remotes/origin/HEAD -> origin/master
  remotes/origin/git_command
  remotes/origin/master
$ git checkout -b develop origin/git_command

補足 git checkout -b [ローカルに作成するブランチ名] [リモート上のブランチ] -bオプションを指定しておくと、自動的にそのブランチに切り替わる。 -bオプションを指定しないと、以下を再度する必要がある。

現在のブランチに別のブランチの編集をマージする

$ git marge <取り込むブランチ名>

ローカルブランチの削除

$ git branch -d ブランチ名

リモートブランチの削除

$ git push --delete origin <削除するリモートブランチ名>

ローカルに残ってしまっているリモートブランチを一括削除

$ git fetch -p

リモートリポジトリから変更を取得して、マージしない( ローカルリポジトリのみに変更を反映)

$ git fetch <リモートレポジトリ>

ブランチの統合

fast-forward (ファーストフォワード)

2つのコミットAとBとがあるときに、コミットAにいたる歴史がコミットBにいたる歴史にすべて含まれている場合、2つのコミットはファーストフォワードの関係にある、とか、コミットAはコミットBにファーストフォワードする、といいます。

コミットAの歴史: X -> A コミットBの歴史: X -> A -> Y -> B コミットBの歴史に、コミットAの歴史が全て含まれている。

これが「fast-forward」な関係

コミットAの歴史: X -> Y -> A コミットBの歴史: X -> Y -> Z -> B コミットBの歴史に、コミットAの歴史が含まれていない(Aのコミットが含まれていない

これだと「fast-forward」な関係ではなくなり、「none fast-forward」


marge と rebaseについて

mergeとrebaseは共に履歴を統合しますが、特徴が異なります。

  • merge 変更内容の履歴はそのまま残るが、履歴が複雑になる。

  • rebase 履歴は単純になるが、元のコミットから変更内容が変更される。 そのため、元のコミットを動かない状態にしてしまうことがある。 mergeとrebaseは、チームの運用方針に応じて使い分けます。 例えば、履歴を一本化するように運用をするのであればrebaseを使う。

トピックブランチに統合ブランチの最新のコードを取り込む場合はrebaseを使う。統合ブランチにトピックブランチを取り込む場合は、まずrebaseしてからmergeというように使い分けます。

tag

tagの一覧表示

$ git tag

tagの一覧表示(アノテーション付き)

$ git tag -n

tagをつける

$ git tag tag名

tagをつける(アノテーション付き)

$ git tag tag名 -m "アノテーション"

特定のcommitにtagを付ける

$ git tag tag名 commitハッシュ 

tagの削除

$ git tag -d tag名 

tagをパターンで検索して表示する

$ git tag -l "A*" 

tagをリモートレポジトリに反映

$ git push origin tag名

リモートレポジトリのタグを削除

git push origin :tag名
[alias]
	s = status
	co = checkout
	rb = rebase
	br = branch
	cm = commit -m
	glog = log --graph --oneline --decorate --all

サブモジュール

$ git submodule foreach git pull origin master


$ git submodule update --init --recursive
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment