LoginSignup
9
7

More than 5 years have passed since last update.

gitコマンドまとめ

Last updated at Posted at 2018-06-04

コマンドメモがわり
※ いろいろアレなので適宜追記・修正予定。。。

参考

【Git】基本コマンド
Gitのオプションことはじめ

基本

初期化

gitで管理したいプロジェクトのルートディレクトリまで移動してから
git init

Rails5系のプロジェクトの場合は最初からgit管理可能な状態っぽいので
git init不要

ディレクトリ内に
.git
ディレクトリが存在すれば、恐らく既に "git init" 済みかと

アカウント登録

コミットするには登録済みのgithubアカウントの情報
ターミナルから設定しておく必要がある。下記コマンドで簡単に設定可能

git config --global user.email ここに自分のアドレス
git config --global user.name ここに自分の名前

gitで起きたエラーの解決法

リモートリポジトリとの紐付け

Git管理したいプロジェクトのディレクトリを、Githubに登録したリモートリポジトリと紐付け設定する。これをしないとgit pushでリモートリポジトリへのアップロードができない。
(Githubでのリモートリポジトリ作成前でも実行可能。)

git remote add origin https://github.com/ユーザー名/リポジトリ名.git
確認
git remote -v

あとはGithubでリモートリポジトリが作成されていれば、準備はOK。

クローン作成

githubからだれかのリポジトリを落としてくるときに

URLはgithubサイトの各リポジトリページの
Clone or downloadからコピーできる

(というか、そのページのURLに.gitを付けるだけなんだけどね)

#プロジェクト配置ディレクトリに移動
cd プロジェクト一覧ディレクトリパス
#クローン実行
git clone <uri>
#ディレクトリ名を指定すると任意のプロジェクト名で(書き換えて)cloneできる。
git clone <uri> [書換え後のディレクトリ名]

最新リビジョンのみ取得したい場合、--depthを用いて指定する。
git リポジトリの最新の履歴だけを取得する shallow clone

git clone --depth 1 <gitのURL>

#ディレクトリ名を指定すると任意のプロジェクト名で(書き換えて)cloneできる。
git clone --depth 1 <gitのURL> [書換え後のディレクトリ名]

追加操作

編集中のプロジェクト等で編集内容が確定し、ファイルをコミットする時とか

#記録対象を指定
git add .

#コミット = Git(のリポジトリ)に保存する
# -m 以降はコメント(コミット内容の説明)
git commit -m "Initialize repository"

Gitのリモートリポジトリに登録

githubのリモートリポジトリにコミットした情報を登録する。

https://git-scm.com/docs/git-push

#git push  <リモートGit名> <ブランチ名> 
git push origin master

#登録先が同じ場合は、2回目以降下記のコマンドだけで実行可能
git push

2回目以降のgit pushは便利だけど、branchが複数ある場合は要注意

引数なしのgit pushは危険なので気をつけましょう

削除&取消し

直前にコミットした時の状態に戻す

#ファイル等の削除以前にコミットされていれば、コミットした時の状態に戻すことができる。
git checkout -f

gitにpush済みのファイルをgitから削除

gitにpushしてしまっている場合下記のコマンドで削除 | ゼロイチ

#既にgitにpushしてしまっている場合下記のコマンドで削除
#git rm --cached ファイル名
git rm --cached .DS_Store

#コミット、プッシュしてリモートリポジトリから削除する
git commit -m "Extermination .DS_Store"                                                                   
git push                                                                                               

※ ちなみに、.DS_Storeに関しては.gitignore_global
記述しておけば最初からGit管理対象に入れないようにできます。

グローバルで.gitignoreを適応する

直前コミット戻し & add戻し

#直前の コミット を取り消し (コミット履歴は残したまま)
git reset --soft HEAD^
#直前の add を取り消し
git reset HEAD
#ファイル単体で指定して add 取り消し
#git rm --cached ファイル名もしくはファイルパス
git rm --cached config/database.yml
実行注意
#直前の コミット を取り消し → コミット履歴も消し去る!
git reset --hard HEAD^

さっきの取り消したい!って時のGitコマンドまとめ

ワーキングツリーを戻す

まだaddすらしていないファイル群が対象。
git管理されているファイルで変更(modified:)したものを戻す。

すべて
git checkout .
ファイル単体
git checkout <file>

【Git】ローカルの修正を前回のcommitまで戻す方法

Untracked files(未追跡ファイル)を削除

新規追加したファイルなどでまだadd等していないのでgit管理されていないファイルが対象
:bangbang: git clean コマンド実行後は元に戻せないので注意

#削除されるファイルを表示、実際のファイル削除はしない。
git clean -n
#作業ディレクトリから追跡対象外のファイルを削除する(取り消し不可)
git clean
#設定オプション clean.requireForce がfalse 出ない場合は、-f フラグが必須
git clean -f

git Untracked files(未追跡ファイル)を1発で消し去る

git diff

Git管理している ローカルPCのファイル とGitの リモートリポジトリのファイル とで
差分見るやつ

サンプル
# touch hoge.txt
git_addする前に変更差分を確認
git diff

# 指定ファイルの変更差分を見る
git diff -- 指定ファイルのパス

↑ git push 後など、変更がなければ何も出力されない

git_add後に変更差分を確認
# git add hoge.txt

git diff --cached
git_commit後に変更差分を確認
# (「最新コミット」と「最新コミットのひとつ前」との差分)

# git commit -m "just hoge" -- hoge.txt

# git diff HEAD^..HEAD
git diff HEAD^..
ほか
# ファイルごとの変更差分(対象行数)を表示
git diff --stat

# ブランチ同士で比較(ブランチ「hoge」と「master」の場合↓)
git diff hoge..master

--name-only

差分のあるファイルのファイル名だけ出力

ファイル名だけ出力して確認
## addの前
git diff --name-only
## add後
git diff --cached --name-only
## commit後
git diff HEAD^ --name-only
git_addのドライラン時にファイル名で差分確認
#「git add」のドライラン時に「git diff」の結果をファイル名だけで一覧出力
git add -n .; git diff --name-only

ほかオプション

# 改行コード・空白を無視して表示
git diff -w

# 空行を無視して表示
git diff --ignore-blank-lines

# 単語単位で差分比較する
git diff --color-words

ほか、詳しくはこちら ↓

忘れやすい人のための git diff チートシート - Qiita

git log

コミットログを表示

git log
オプション例
# 番号とコミットコメントをセットで表示
git log --oneline

# 変更されたファイル(+変更量)を併せて表示
git log --stat

# 完全な差分表示
git log -p

git show

コミットの詳細(変更差分など)を表示

git show
コミット番号指定で見る場合
# logで番号を確認してから番号指定する

git log --oneline
# or
git log --pretty=format:%h ブランチ名 | head

git show 番号

私の使うGitコマンドまとめ 見る編

.gitignore関連

すでにGitの管理下にあるものを除外したい

すでに管理対象となっているファイルは、.gitignoreに記述しただけでは対象から外れない。下記のようにコマンドラインでの操作が必要

個別でやる場合
# ファイルの場合  git rm --cached ファイル名
git rm --cached mfp.cache.js
#  ディレクトリの場合 (-r を忘れずに!)  git rm --cached -r ディレクトリパス
git rm --cached -r cache/

# コミットする(.gitignore変更後にaddしてから)
git add .gitignore
git commit -m "Rewrite .gitignore"
一気にやっちゃう場合
# 一旦全てを対象から外す
git rm --cached -r .
# あらためて、全てを対象に含める (.gitignoreに記述されたものは除外される)
git add -A .
# コミットする
git commit -m "Rewrite .gitignore"

Git: バージョン管理の対象から外したいファイルを「.gitignore」に記述する
git のコミットメッセージ用例集がほしい(2)

branch関連のコマンドまとめ

各コマンドをalias登録しとくと楽なんじゃね?
# branch一覧表示
git branch

# branch作成
git branch ブランチ名

# branch移動
git checkout 移動先のブランチ名

# branch作成 + 移動
git checkout -b 新規作成&移動先のブランチ名

# branch削除
git branch -d 削除したいブランチ名

# branch名の変更
git branch -m 変更前ブランチ名 名称変更後のブランチ名
# git branch -m hoge piyo

# branchのマージ
git merge ブランチ名
作業後に指定したブランチ内容をmasterブランチに反映↓

#指定のブランチで作業している想定で
git add .
git commit -m "test commit"
git checkout master
git merge 指定のブランチ名

作業ブランチで作業後にadd,commitをせずにmasterブランチにcheckoutしたりすると、作業した内容がそのままmasterブランチに反映されてしまう:scream:ので

ブランチを切り分けて作業している場合checkoutする前に必ずadd/commit作業をすることを忘れない様にしたい。:angry:

別のブランチに元のブランチの修正内容を引き継ぎたくないのであれば、元のブランチでコミットしてからチェックアウトしてください。
Git - git guiで勝手にマージされる(39310)|teratail


Git ブランチ操作をディレクトリ操作のように使いたいときのエイリアス
ブランチを切り替える
ブランチをマージする


いや、git stashがあるよ?:sunglasses:

git stash

作業ファイルの一時退避コマンド。
addしたファイルを一時的に退避状態にして他のブランチに移動しても影響が無い様に作業できる。

コマンド例
vim hoge.txt
# add
git add hoge.txt
# ファイルを退避
git stash
#Saved working directory and index state WIP on hoge1: c888888 hoge test

# ブランチ移動しても影響なし
# git checkout hoge2

git stash list
#stash@{0}: WIP on hoge1: c888888 hoge test
一覧表示
# 退避中のファイル一覧を表示
git stash list

# 変更内容つきで確認
git stash list -p

# 変更内容の詳細確認
git stash show スタッシュ名
ファイル復活
# 退避ファイルの復活
#git stash apply スタッシュ名

git stash apply stash@{0}

※ のちのち追記予定

変更を一時的に退避!キメろgit stash
色々な git stash

部分merge(cherry-pick)関連

branch から branch へコミット情報を一部反映させる手順的な
この項目は、コマンドを試していて挙動が不明確な部分があったので、参考までに。。。

merge
# 現在のブランチのコミットログを表示
git log

# 指定のブランチ(hoge)のコミットログを表示
git log hoge

# コミット番号を省略(先頭番号だけに)して表示
#git log --pretty=format:%h ブランチ名
git log --pretty=format:%h master

# コミット番号とコメントをセットで(さらに直近の部分だけにして)表示
#git log --oneline ブランチ名 | head
git log --oneline master | head

git log --oneline develop | head
cherry-pick
# 現在のブランチを確認
$ git branch
  master
* develop

### [ master <- develop ] したい場合 ###

# 1. ブランチを master ブランチに切り替える
$ git checkout master

# 2. git cherry-pick コマンドで特定のコミット(例:79g584f)をマージする
$ git cherry-pick 79g584f
developブランチの「79g584f」コミットだけmasterブランチに反映される

この時、コミットの番号はマージ元のブランチからコピーされるわけではなく
マージしたコミット番号として新規登録される。
:bangbang:これが「マージコミット」とみなされない場合があるので、まだ確認中。。。

gitで1ファイル(1部分)ずつmergeしたい
Git で特定のコミットをマージする方法メモ

取り消し
# 一つ前のコミット番号を表示
$ git show | head -1
commit 2dthk7ad36e88b22300ba7dfse656h315g0fcc1z

# マージコミットを取り消し
git revert -m 1 2dthk7

注意が必要なのは、このようにマージコミットを打ち消すと、打ち消されたブランチに含まれていた変更が、その後、そのブランチを再度マージしたとしても、取り込みが発生しない、という事になります。これは、revert により変更自体は打ち消されても、マージの事実が歴史上に残り続けるからです。
git merge の取り消し方法。reset と revert コマンドについて。

マージコミットの取り消しエラー
error: mainline was specified but commit 49b40aad36e88b25100ba7e7d76e3e315f0fcc1a is not a merge.
fatal: revert failed

上記のようなエラーが表示された場合、マージコミットではなく普通のコミットとして記録されているのでgit revert HEADで戻せる( ※直前コミットの場合)

git revert HEAD        

git pull

リモートリポジトリの情報を基準としてローカルに同期する。

ローカルで編集中のファイルがあったり、addやcommitしたものがある場合は調整しなければならないが、そうでなければ(nothing to commit, working tree cleanなら)下記のコマンドで1発同期できる

git pull origin master

git pullを使ってリモートリポジトリと同期する方法
git pull と git pull –rebase の違いって?図を交えて説明します!
git pull を強制し、リモートでローカルを上書きする方法

9
7
0

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
7