コマンドメモがわり
※ いろいろアレなので適宜追記・修正予定。。。
#参考
#基本
###初期化
git init
Rails5
系のプロジェクトの場合は最初からgit管理可能な状態っぽいので
git init
は不要。
ディレクトリ内に
.git
ディレクトリが存在すれば、恐らく既に "git init" 済みかと
アカウント登録
コミットするには登録済みのgithubアカウントの情報を
ターミナルから設定しておく必要がある。下記コマンドで簡単に設定可能
git config --global user.email ここに自分のアドレス
git config --global user.name ここに自分の名前
リモートリポジトリとの紐付け
Git管理したいプロジェクトのディレクトリを、Githubに登録したリモートリポジトリと紐付け設定する。これをしないとgit push
でリモートリポジトリへのアップロードができない。
(Githubでのリモートリポジトリ作成前でも実行可能。)
git remote add origin https://github.com/ユーザー名/リポジトリ名.git
git remote -v
あとはGithubでリモートリポジトリが作成されていれば、準備はOK。
#クローン作成
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のリモートリポジトリにコミットした情報を登録する。
#git push <リモートGit名> <ブランチ名>
git push origin master
#登録先が同じ場合は、2回目以降下記のコマンドだけで実行可能
git push
2回目以降のgit push
は便利だけど、branchが複数ある場合は要注意
#削除&取消し
###直前にコミットした時の状態に戻す
#ファイル等の削除以前にコミットされていれば、コミットした時の状態に戻すことができる。
git checkout -f
###gitにpush済みのファイルをgitから削除
#既にgitにpushしてしまっている場合下記のコマンドで削除
#git rm --cached ファイル名
git rm --cached .DS_Store
#コミット、プッシュしてリモートリポジトリから削除する
git commit -m "Extermination .DS_Store"
git push
※ ちなみに、.DS_Store
に関しては.gitignore_global
に
記述しておけば最初からGit管理対象に入れないようにできます。
###直前コミット戻し & add戻し
#直前の コミット を取り消し (コミット履歴は残したまま)
git reset --soft HEAD^
#直前の add を取り消し
git reset HEAD
#ファイル単体で指定して add 取り消し
#git rm --cached ファイル名もしくはファイルパス
git rm --cached config/database.yml
#直前の コミット を取り消し → コミット履歴も消し去る!
git reset --hard HEAD^
###ワーキングツリーを戻す
まだaddすらしていないファイル群が対象。
git管理されているファイルで変更(modified:)したものを戻す。
git checkout .
git checkout <file>
###Untracked files(未追跡ファイル)を削除
新規追加したファイルなどでまだadd等していないのでgit管理されていないファイルが対象
git clean コマンド実行後は元に戻せないので注意
#削除されるファイルを表示、実際のファイル削除はしない。
git clean -n
#作業ディレクトリから追跡対象外のファイルを削除する(取り消し不可)
git clean
#設定オプション clean.requireForce がfalse 出ない場合は、-f フラグが必須
git clean -f
git diff
Git管理している ローカルPCのファイル
とGitの リモートリポジトリのファイル
とで
差分見るやつ
# touch hoge.txt
git diff
# 指定ファイルの変更差分を見る
git diff -- 指定ファイルのパス
↑ git push 後など、変更がなければ何も出力されない
# git add hoge.txt
git diff --cached
# (「最新コミット」と「最新コミットのひとつ前」との差分)
# 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 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 番号
#.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関連のコマンドまとめ
# 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 ブランチ名
#指定のブランチで作業している想定で
git add .
git commit -m "test commit"
git checkout master
git merge 指定のブランチ名
作業ブランチで作業後にadd
,commit
をせずにmaster
ブランチにcheckout
したりすると、作業した内容がそのままmasterブランチに反映されてしまうので
ブランチを切り分けて作業している場合
はcheckoutする前に必ずadd/commit作業をすることを忘れない様にしたい。
別のブランチに元のブランチの修正内容を引き継ぎたくないのであれば、元のブランチでコミットしてからチェックアウトしてください。
Git - git guiで勝手にマージされる(39310)|teratail
Git ブランチ操作をディレクトリ操作のように使いたいときのエイリアス
ブランチを切り替える
ブランチをマージする
いや、git stash
があるよ?
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 へコミット情報を一部反映させる手順的な
この項目は、コマンドを試していて挙動が不明確な部分があったので、参考までに。。。
# 現在のブランチのコミットログを表示
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
# 現在のブランチを確認
$ git branch
master
* develop
### [ master <- develop ] したい場合 ###
# 1. ブランチを master ブランチに切り替える
$ git checkout master
# 2. git cherry-pick コマンドで特定のコミット(例:79g584f)をマージする
$ git cherry-pick 79g584f
developブランチの「79g584f」コミットだけmasterブランチに反映される
この時、コミットの番号はマージ元のブランチからコピーされるわけではなく
マージしたコミット番号として新規登録される。
これが「マージコミット」とみなされない場合があるので、まだ確認中。。。
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 を強制し、リモートでローカルを上書きする方法