EurekaMoments

ロボットや自動車の自律移動に関する知識や技術、プログラミング、ソフトウェア開発について勉強したことをメモするブログ

良く使うGitコマンドの逆引きメモ

目次

はじめに

今更ながら、会社でも自宅でもソースコード管理をするのにGitを使うようになったのですが、良く使う基本的なコマンドすら中々覚えられないので、いつでも見返せるように逆引きメモとして残しておこうと思います。

リモートリポジトリからクローンする

git clone <URL>

ブランチを作成する

hogeブランチを作成

git branch hoge

今いるブランチを*で示す

git branch

ブランチ一覧を確認する

git branch --all

作業ブランチを切り替える(チェックアウト)

hogeブランチに切り替える

git checkout hoge

ブランチ作成 + チェックアウト

hogeブランチを作成して切り替える

# from current branch
git checkout -b hoge

# from master
git checkout -b hoge master

既存ブランチと同じ名前のブランチを強制的に再生成 + チェックアウト

hogeブランチが既に存在している場合でも新規に再生成

git checkout -B hoge master

全ての変更を破棄して強制的にチェックアウト

git checkout -f master

ブランチ名を変更する

ブランチ名をhoge1からhoge2に変更

git branch -m hoge1 hoge2

ブランチを削除する

ブランチhogeを削除

git branch -d hoge

リモートリポジトリとURLの一覧を表示

git remote -v

リモートリポジトリを追加

hogeリポジトリを追加

git remote add hoge URL

リモートリポジトリを削除

git remote rm hoge

前回のコミットと比較した変更内容を表示

git status

ワークスペース上の編集 or 追加ファイルをステージに上げる

編集 or 追加されたhogeファイルをステージに上げる

git add hoge 

ローカルリポジトリにコミットする

git commit -m "comment"

直前のコミットに上書きする

git commit --amend

コミットログを確認する

git log

インデックスの変更内容を取り消す

git reset <file path>

現在のブランチの先頭コミットと同じ状態に戻すなら、

git reset HEAD <file path>

最後のコミットから2回以上のaddがあった場合、1回目を含めて全てがリセットされるので、git addコマンド1回分の取り消しではない。

git commitの実行を取り消す

最新のコミット内容をちょっとだけ変更したい時。
インデックスには最新の変更を残したまま、HEADだけを一つ前に巻き戻す。

git reset --soft HEAD^

過去のコミット直後に強制的に戻す

ローカルのmasterとリモートのorigin/masterと食い違ってしまい、とりあえずリモートに合わせたい時に、コマンド一撃で合わせる事ができる。

git reset --hard origin/master

ローカルへのコミットをリモートリポジトリにpushする

git push -u origin master

リモートリポジトリの変更をローカルに取り込む

git pull 

リポジトリからファイルを削除 + ディレクトリから削除

git rm hoge

リポジトリからファイルを削除 + ディレクトリには残す

git rm --cached hoge

ファイル名を変更する

git mv original_file renamed_file

あとはいつも通りにcommit->push

タグを付ける

コメント無しの場合

git tag v1.4

コメントありの場合

git tag -a v1.4 -m "comment"

後からタグを付ける
付けたいコミットを指定すればいい

git tag -a v1.4 -m "comment" 9fceb02

作成したタグをリモートに反映させる

git push origin v1.4

コンフリクトした時の解消手順

qiita.com

SVNリポジトリからローカルのGitリポジトリを作成する

作業ディレクトリに移動して、そこにSVNリポジトリをクローンする。

cd local_working_directory
git svn clone <SVN repository URL>

git clone -sにすると、trunk, branches, tagsの構成をそのまま取り込める。

ローカルGitリポジトリに変更を行い、SVNリポジトリへ反映する

例えばhoge.pyというファイルを修正したとして、まずはローカルcommit

git add hoge.py
git commit -m "comment"

次にSVNのリモートリポジトリに反映

git svn dcommit

最後にちゃんと反映されているか確認する。作業ディレクトリに移動して、

svn update
svn log

Git Bashで新規ファイルを作成する

touch hoge

Gitのブランチモデル

tracpath.com

OSSの本家のリポジトリの変更をForkした自分のリポジトリに取り込む

まずはローカルブランチをmasterにチェックアウト

git checkout master

upstream(OSSの本家リポジトリ)の最新版の内容をfetch

git fetch upstream

ローカルのmasterにupstreamの内容をmergeする

git merge upstream/master --ff-only

tech-broccoli.life

最後にリモートのmasterに更新を反映する

git push origin master -u

qiita.com

プルリクエストを使った開発フロー

qiita.com

プルリクエストをIssueにリンクする

docs.github.com