概念
Git Cheatsheet

1人で使う

変更を記録

  • git add <file name>:<file name> の変更をインデックスへ記録する
  • git add -u:すべてのファイルの変更をインデックスへ記録する
  • git add -p:インタラクティブにインデックスへ変更を記録する [s] さらに細かく分割
  • git commit :コミットする(ログエディタが開く)
  • git commit -m:コミットする(メッセージ付き)
  • git commit <filename>:<filename>だけをコミットする
  • git commit -a:現在の変更内容をすべてコミットする
  • git commit -v:ファイルへの変更を見ながらコミットする
  • git reset <filename>:<filename>に行った変更を元に戻す
git add -p [s]について
'-'の行をaddしたくない場合,'-' を ' 'に変更する
'+'の行をaddしたくない場合,'+' の行全体を削除する

コミットログの書き方

変更の要約:
〜空行〜
変更の理由:

変更を修正

  • git reset <filename>:HEADにHEADとインデックスが戻る.(※要するにインデックスだけ戻る)<filename>だけ(ワークツリーはそのままま)
  • git reset object filename:任意のコミットにファイルの内容を戻す.
  • git reset HEAD^:HEAD^にHEADとインデックスが戻る(ワークツリーはそのまま)
  • git reset object:objectにHEADとインデックスが戻る(ワークツリーはそのまま)
  • git reset --hard HEAD^:<HEADコミットの一つ前のコミットオブジェクト>に戻る(ワークツリーも取消)
  • git reset --hard HEAD:最新のコミットの状態に戻る(ワークツリーも取消)
reset の オプション
 インデックスワークツリー
--mixed(デフォルト)打ち消しそのまま
--softそのままそのまま
--hard打ち消し打ち消し
reset --hard をやるなら stashでワークツリーを記憶させておくことが有効
  • git revert オブジェクト名:特定の不都合なコミットを打ち消して,新しいコミットを作る.
--o---Z---M---A---B---C---D master
コミットMの内容がまずい.
git revert M
--o---Z---M---A---B---C---D---W master
Mを打ち消した新しいWというコミットを作る
  • git revert --continue revertでconflictが発生した場合に修正後継続
  • git revert --abort revertでconflictが発生した場合に中止

  • git rebase -i HEAD~3:3つ前のコミットに戻り(ワークツリーはそのまま),コミットをやり直し
    • >git commit --amend -a -> git rebase --continue
  • git checkout <filename>:インデックスの内容のファイルを取り出す(結果的にワークツリーが戻る)
  • git checkout HEAD <filename>:HEADの内容のファイルを取り出す(結果的にワークツリーが戻る)
  • git checkout HEAD~4 <filename>:4つ前のコミットの内容のファイルを取り出す(結果的にワークツリーが戻る)
git checkout はブランチ名を指定した場合と,ファイル名を指定した場合の動作が全く異なる.
ブランチ名ファイルの内容は変更しない.ブランチの切り替え.チェックアウト前のファイル変更がこれからチェックアウトするブランチとぶつかる場合はチェックアウトが失敗する.
ファイル名今のブランチにいるままでファイルの内容を変更する
  • git commit --amend :直前のコミットのログだけ編集
  • git commit --amend -a:直前のコミットに追加
  • git reflog; git reset HEAD@{4}:reflogにもどす

変更を確認

  • git diff :ワークツリーとインデックス
  • git diff HEAD:ワークツリーとHEAD
  • git diff --cached:インデックスとHEAD
  • git diff [object]:ワークツリーとobject
  • git diff コミット1 コミット2:コミット1とコミット1
  • git diff コミット1 コミット2 -- filename:コミット1とコミットのファイル
  • git status:今コミットしたらどうなるかを表示
  • git log <filename>:filenameの履歴
  • git log --pretty=short:要約したログ出力
  • git log --oneline:1つのコミットにつき1行を表示
  • git log --grep=<patten>:pattenの入ったログ
  • git log --all --graph --oneline:グラフィカルに表示
  • git blame <filename>:行単位の履歴
  • git log:HEADから現在の変更
  • git log -p:パッチ形式で出力
  • git show:前回コミット(HEAD)の内容
  • git show HEAD^^:前々回コミットの内容
  • git show -M:ファイル名変更検知
  • git diff -M:ファイル名変更検知
  • git reflog:リポジトリにやった全ての変更を表示

ファイルの追加削除リネーム

  • git mv ファイルの移動、リネーム
  • git rm -f <filename>:<filename>を版管理下から除き削除する
  • git rm --cached -f <filename>:<filename>を版管理下から除く
  • 無視するファイル:.gitignoreファイルへ書いておく

2か所で使う

バックアップリポジトリ(中央リポジトリ)を作る

  1. cd <BakDir>, git --bare init (bareはファイルを置かずに管理情報だけ置く)
  2. cd <Current WorkDir>,git push <BakDir> master
  3. cd <New WorkDir>,git clone <BakDir> <New Dir>
  4. rm -rf <Cuurnt WorkDir>

ローカルでスタートしたリポジトリをリモートリポジトリに展開する。

  1. cd <BakDir>, git --bare init (bareはファイルを置かずに管理情報だけ置く)
  2. git remote add origin <BackDir>
git branch -M main
git push -u origin main

変更をリポジトリに上げる.衝突は失敗する

  • git push <dst> <src>
本来 git push は「どのリポジトリに」「どのブランチを」指定する必要があるが,git cloneで作ったリポジトリでは,デフォルトで,clone してきた元のリポジトリに対して,双方で共有しているブランチをすべて転送するように設定される.
cloneしてきた元のリポジトリはoriginというニックネームで呼べるので,最後の行は,git push origin master と同じこと
失敗した場合
! [rejected]        master -> master (non-fast forward)
pullした後に別の変更がバックアップになされているため.
一旦ローカルでマージする
%git pull
Auomagic merge failed;..などと言われる.
衝突を解消し,衝突を解消したコミットを作る
%git commit
%git push

ローカルにマージコミットを作る

  • git pull <dst> <src>

コミットに名前をつける

  • git tag <name> <object>
  • git tag -a <name> <object>:コメント付き

コミット名一覧

  • git tag
  • git tag -n :コメント付き

名前のヒント

  • git describe
  • git describe --contains <object>

ブランチ

  • git branch -av :ブランチ一覧
  • git branch <branch name>:現在の状態でnameブランチを作る
  • git checkout <branch name>:ブランチをnameに切り替える
  • git checkout -b <branch name>:現在の状態でnameブランチを作り,切り替える
  • git merge <branch name> :現在のワークツリーに<name>をマージする.
  • git merge --abort:マージを中止する
  • git merge --no-ff <branch name> :fast-foward mergeが可能な場合もマージコミットを作成する
  • git merge --ff-only <branch name> :fast-foward mergeが可能な場合のみマージを行う

後からブランチを作る

  1. git branch <branch name>:masterのまま更新を4回続けてしまった.今現在の状態でブランチを作る
  2. git reset --hard master~4:4つ戻ったところにmasterを戻して4回分はmasterブランチから廃棄
  3. git checkout <branch name>:再び最新の状態に戻って開発を続ける

現在のワークツリーにした変更を別のブランチに適用したい

  1. git checkout <other branch>
  2. git commit -a
  3. git checkout <current branch>

gitk

ブランチも含めて表示する

  1. gitk --all:常に表示しておくと便利

github

sshを使用する

ubuntu 10.04ではgitのバージョンが古く、httpsが使えない模様。そこで、SSHを利用する
Generating SSH Keys

ブランチを落とす

  • git clone --branch=<branch> <repogitory>
※pushするためには,[http]ではなく,[ssh]のURLから落とす

※ワークツリーの変更をそのままotherに持って行けない場合は失敗するので,git stashを使う.

コミットしてない全ての状態をいったん保存しておく.

  • git stash -> git stash pop

gitignore

.gitignoreファイルの役割は,untracked file として検出しないこと.よって,一旦管理下においたものが,ひとりでに抜けることはない.

ホワイトリスト管理

%cat .gitignore
dist
cabal-dev
*
!*.hs
!Makefile

整理

  • git clean -n 確認
  • git clean -d -f 削除
  • git clean -x -f 無視するファイルを含めて削除

リモート

  • git remote add リモートリポジトリ名のURL :リモートを作成する
  • git remote add origin リモートリポジトリ名のURL :リモートを作成する
  • git remote -v リモートリポジトリの確認
  • git diff origin/master master リモートトラッキングブランチとmasterの差分を表示する.
  • git fetch リモートトラッキングブランチを更新する
  • git fetch origin リモートリポジトリのすべての状態をリモートトラッキングブランチに反映する
  • git pull <リポジトリ名=origin> <リモートブランチ名>リモートトラッキングブランチを更新し,ローカルブランチとmergeする. e.g $ git pull origin master 現在チェックアウト中のブランチとリモートのmasterブランチを統合する

上流ブランチの設定

  • git branch --set-upstream すでにローカルブランチがあって,上流ブランチと関連付ける.
  • git push -u まだリモートにブランチがない場合やリモートにプッシュする機会に使う
  • git checkout -t -b クローン後に,追跡ブランチをチェックアウトして,ローカルブランチを作る場合に使う.
  • git remote show origin 設定を見る

その他

コミットの呼び方

  • HEAD 現在最新のコミット
  • HEAD^ 1つ前のコミット
  • HEAD^^ 2つ前のコミット
  • HEAD~2 2つ前のコミット

オブジェクト名とファイル名が同じ場合(例えば「HEAD」というファイルを管理していた場合)

  • git add -- HEAD
"--" をつけて,これ以後はファイル名を指すことを明示する.

変数

  • \[core\]autolf:真に設定しておくと、CRLFをLFで記録し、ワークツリーに書き出すときは自動でCRLFに直す

ログにゴミが入る件

PAGERが影響
%git config --global core.pager "lv -c"

guiのフォントを整える.

  • apt-get install wish8.5
  • update-alternative --config wish で wish8.5を選択

設定する,設定を確認する

%git config --global core.editor "vim"
%git config --global user.name "hoge"
%git config --global user.email "fuga@.com"
%git config --global -l

このページへのコメント

QEnrM7 This is one awesome blog.Really thank you! Will read on...

0
Posted by check it out 2014年01月23日(木) 14:59:34 返信

git - Yamanobori_old鐃緒申Memo - Seesaa Wiki鐃淑ワ申鐃緒申鐃緒申鐃緒申 for 鐃緒申鐃殉¥申鐃夙フワ申鐃緒申 moncler maya http://www.pslcbi.com/moncler2014.html

0
Posted by moncler maya 2013年12月08日(日) 04:12:42 返信

コメントをかく


「http://」を含む投稿は禁止されています。

利用規約をご確認のうえご記入下さい

管理人/副管理人のみ編集できます