目次

Git

未整理

変更を無かったことにする

変更を加えたファイルを変更前に戻す

git reset --hard HEAD

追跡していないファイルを一括で削除できる.

git clean [-d] -n # 削除対象の確認
git clean -f # 削除実行
git clean -df # ディレクトリも含めて削除

GitHubに登録している鍵の把握

https://github.com/${USERNAME}.keys

git diff

見やすさのために

git diff --stat

コミットを作らず差分の共有をする

# パッチファイルを作るとき(working vs staging)
git diff > hoge.patch
## ↑は staging と workingdir の比較
## 前回 commit と workingdir を比較する場合は
git diff HEAD > hoge.patch
# パッチを適用するとき(コミットを作らず working に展開)
git --git-dir= apply -p1 hoge.patch
# または
patch -p1 < hoge.patch
 
# パッチを戻すときは
git --git-dir= apply -R -p1 hoge.patch
## というように -R オプションを付ければよい。

特定のディレクトリ以下について調べる場合は git diff –relative=hogedir で指定。

patch も base64 で共有するのが良いかも。空白などの情報が大切みたい。

bundle を使ってコミットを共有する

以下のような流れで実行する

タグ

タグ付け

git tagを付けるとgithubではReleaseとして出る

tagの付け方

git tag -a v0.0.5 -m “version up” コミットハッシュしてgit push origin v0.0.5すると反映される.

タグ削除

git tag -d TAGNAME
git push origin :TAGNAME

その他

ブランチの削除

マージ済みコミットとかは残してブランチ名だけ削除してやる.

ローカルブランチ git branch -D foo
リモートブランチ git push origin :foo
リモート追跡ブランチ git branch -d -r bar-remote/foo-branch

空のコミット

リポジトリの最初のコミットを空にしておくと何かと便利だったりする.

git commit --allow-empty -m "empty commit"

コミット取り消し

何も考えずに git add -A; git commit -m “save” してしまったとき, 稀に画像などを入れてしまうことがある.

git reset --soft HEAD^

でcommitコマンドを無かったことにする.

強制push

コミットを push してから取り消したくなったとき、前述のコミット取り消しをしたあと、

git push origin +master

というように + を付けて push する

強制pull

git fetch
git reset --hard origin/master

remote のURL確認

git config --get remote.origin.url

コミットコメントの修正

https://www.granfairs.com/blog/staff/git-commit-fix

コミットツリーを可視化する

git log -a --graph --oneline --decorate=full

基本

gitの設定

階級と設定場所

Linux の場合

階級 設定ファイル場所 メモ
system /etc/gitconfig 使わないこと推奨
global ~/.gitconfig (~/.config/git/config) ユーザーごとに
local .git/config リポジトリごとに

コマンドを使って設定する

以下のように設定する.

git config --<階級> hoge.fuga.piyo <設定値>

設定可能な値の詳しいドキュメントは http://git-scm.com/docs/git-config.html にあるが,多すぎるので割愛.

設定を確認する

git config --get hoge.fuga.piyo

設定を消す

git config --unset hoge.fuga.piyo

よく使う設定値

名前 メモ
core.editor vim エディタ
remote.origin.url リポジトリのURL
user.name
user.email

歴史改変

マージコミットの取り消し

マージコミットや過去の複数のコミットを取り消すにはどうすればよいかという話。
コミット取り消しには resetrevert があるが、 基本的には revert が推奨らしい。ただし、reset のほうが考えることが少なくて便利。 また、マージコミットについては、revert で取り消すのはとても大変なので、 reset するべし。

branch を扱う

とりあえず dev ブランチを作成して、そこに色々とコミットしていく。

一人で開発していると dev ブランチ開発中に master が進むことはほぼないと思うので 普通にマージすると Fast-Forward マージされて dev ブランチが消えてしまう。 なので強制的にマージコミットを作成してやる必要がある。

git checkout master
git merge --no-ff dev
git push origin master

マージしてしまえばブランチは消してしまって構わない。リモートのとローカルのものを消す。

git push --delete origin dev
git branch --delete dev

コンフリクトした場合

git merge

のコマンドを実行したときにコンフリクトというメッセージが表示されることがある。 各ファイルを開いてコンフリクトを解消したのち、addcommit をする。

git add -A
git commit -m "取り込み"

コマンド

add したものの確認

git diff --cached