LoginSignup
9
21

More than 5 years have passed since last update.

Git備忘録(自分用)

Last updated at Posted at 2015-04-16

Gitメモ

まずはgit設定ファイル

[user]
  name = Hoge Fuga
  email = hogefuga@example.com
[color]
  ui = auto
[alias]
  br = branch
  ch = checkout
  st = status
  co = commit
  fe = fetch
  gr = log --graph --date-order -C -M --pretty=format:\"<%h> %ad [%an] %Cgreen%d%Creset %s\" --all --date=short
  difff = diff --word-diff
[core]
  quotepath = false
  whitespace = cr-at-eol

gitのコマンド備忘録

基本編

基本的な操作はこれが出来ればOK的なもの

作業ツリーの状態を確認

git status

差分を見る

git diff

git indexにファイル追加

# ファイル1つ追加
git add '<ファイル>'
# ディレクトリごと追加もできちゃう
git add <ディレクトリ>
# カレントディレクトリ以下を丸っと追加
git add .

git indexに追加されているファイルをローカルリポジトリに反映

git commit -m '<コミットメッセージ>'
# -mオプション付けないとコミットエディタが起動する
git commit

ローカルリポジトリの内容をリモートリポジトリに反映する

# <remote>はデフォだとorigin
git push <remote> <ブランチ名>
# remoteの向き先設定されていれば指定しなくてOK
git push

リモートリポジトリの変更をとってくる

# 内部的にはfetchとmergeを実行
git pull

初期設定編

順番が逆な気もするけど

gitのconfig設定

git config --global user.name "Hoge Fuga"
git config --global user.email "hogefuga@example.com"

リモートリポジトリを持ってくる

#<作成するディレクトリ名>を指定しないとリポジトリ名で作成される
git clone <リポジトリURL> <作成するディレクトリ名>

新しいリポジトリ作成する

mkdir <project-dir> && cd $_ #プロジェクト用のディレクトリ作成&移動
git init #初期化
touch README.md #適当なファイルを作成
git add README.md
git commit -m "first commit"
git remote add origin <リポジトリURL>
git push -u origin master

既存のローカルリポジトリをプッシュ

git remote add origin <ブランチ名>
git push -u origin master <リポジトリURL>

ブランチの操作

ブランチを表示

# ローカルのブランチのみ表示
git branch
# リモートのブランチのみ表示
git branch -r
# 全てのブランチ表示
git branch -a

現在のブランチからブランチを作成

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

ブランチ移動

git checkout <移動するブランチ名>
# 作成して移動(gitのバージョンによって使えないかも)
git checkout -b <移動するブランチ名>

作成する起点を指定

# リモートリポジトリもOK
git branch <新しいブランチ名> <別のブランチ名|タグ名|リビジョン>
#

ブランチの名前変更

# 新しいブランチ名のブランチがあるとエラー
git branch -m <既存ブランチ名> <新しいブランチ名>

持っているブランチのマージ状態を知りたい

# マージ済みのブランチを表示
git branch --merged
# マージされていないブランチを表示
git branch --no-merged

ブランチ削除

# どこにもマージされていないとエラーになっちゃうよ
git branch -d <ブランチ名>
# マージされていないブランチを強制削除
git branch -D <ブランチ名>

マージあれこれ

別のブランチの変更を取り込む

# commitまでされるよ!
git merge <ブランチ名>
# commitしないでマージだけする
git merge --no-commit <ブランチ名>

1つのコミットだけマージしたい

# commitまでされるよ!!
git cherry-pick -n <リビジョン>
# commitしないで取り出す
git cherry-pick --no-commit <リビジョン>

他のブランチの履歴を1つの新しい履歴としてマージしちゃう

# commitされないので自分で1つのコミットとする感じ
git merge --squash <取り込むブランチ名>

タグ

タグの表示

git tag

現在のブランチにタグを付ける

git tag <タグ名>
# 指定のコミットに付ける場合は?TODOあとで調べる

タグを削除

git tag -d <タグ名>

履歴

履歴を表示

git log
# 一行で表示する
git log --oneline

リモートリポジトリ

リモートリポジトリから変更だけ取得

git fetch

ローカルブランチをリモートリポジトリにプッシュ

git push <リモートリポジトリ名> <ローカルブランチ名>:<リモートブランチ名>

リモートブランチを削除する

# :(コロン)が重要!!
git push <リモートリポジトリ名> :<リモートブランチ名>

応用などあれこれ

直前のコミットメッセージを直したい!

git commit -m "<メッセージ>" --amend
# エディタ立ち上がる
git commit --amend

addしたファイルを戻したい

git reset HEAD

作業ツリーの変更をリモートの状態に戻したい

git checkout <filename>

作業ツリーがわけわからなくなったらHEADの状態に戻したい!

git reset --hard HEAD

作業ツリーが変更されていてgit操作ができないよ!

stashで変更分を一旦隠す
git stash
# メッセージもつけられる
git stash save "<メッセージ>"
直前にstashしたものを戻す
git stash apply
# 指定したstashを戻す
git stash apply <stash@{1}>
stashしたリストを表示
# 表示された行頭から:(コロン)までがstashの識別子(stash@{1}とかになってと思う)
git stash list
取り出したstashがずっと残ってるんですけど

取り出しても残るので削除する必要がある

git stash drop <stash@{1}>
実は取り出して削除することもできちゃう
git stash pop
git stash pop <stash@{1}>
隠した内容からブランチを作れちゃう!!
# 直前のstashから
git stash branch
# 指定stashから
git stash branch <stash@{1}>

stashしたあとに作業ツリーでガンガン作業しちゃった時とかブランチ作ってマージとかがいいかなーっと

stashに保存されているものを全部削除しちゃう!!

※※※通常の操作では二度と戻せないので注意※※※

git stash clear
消したくないstashを間違えて消しちゃった。。。

まだ戻せるかもしれないよ

git fsck --unreachable | grep commit | cut -d\  -f3 | xargs git log --merges --no-walk --grep=WIP

上記で戻したいコミット見つかればリビジョンをメモる

git cherry-pick -n -m1 <リビジョン>

でなんとか戻すことは可能

rebase とか

基本的にリモートリポジトリの変更には使わないこと
どうしてもの場合には共有してから行いましょう

現在のブランチの起点を他のブランチのHEADにしたい
git rebase master

開発用ブランチを作成したあとmasterが進んでしまった時など履歴が綺麗になる

うまくrebase出来ない場合。。。
コンフリクトを手動で解消してrebaseを続行する
git rebase --continue
エラーなんて関係ない!で続行
git rebase --skip
もうrebase無理。。。あきらめた
git rebase --abort
インタラクティブモード(対話式)で色々できちゃう
# 指定したリビジョン以降のコミットが取り上げられる
git rebase -i <リビジョン>
# git log --onelineで確認すると楽

git log --oneline と git rebase -i で立ち上がったエディタのコミット順が逆になるので注意
* p|pick そのままにしておく
* r|reword コミットメッセージを変える
* e|edit コミットファイルを変える
* s|squash 一個前(インタラクティブモードだと一個上)のコミットと合体させる
* f|fixup squashのコミットメッセージ変更しない(メッセージも合体する)

リモートリポジトリをローカルリポジトリに強制的にあわせちゃう

git push -f <リモート> <ブランチ名>

歴史の改変になるので、複数メンバーで開発している場合は使わないこと

9
21
4

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
21