便利な Git コマンド
GitLabのサポートチームが集めた便利なGitコマンドを紹介します。 頻繁に使う必要はないかもしれませんが、必要なときに便利です。
リモート
リモートに別のURLを追加し、プッシュするたびに両方のリモートが更新されるようにします。
git remote set-url --add <remote_name> <remote_url>
ステージングと変更の取り消し
最後のコミットを削除し、変更をアンステージに残します。
git reset --soft HEAD^
HEADから一定数のコミットをアンステージ
例えば、3つのコミットをアンステージするには、次のように実行します:
git reset HEAD^3
HEADから特定のファイルへの変更をステージ解除します。
git reset <filename>
ファイルを HEAD 状態に戻し、変更を削除します。
ファイルの変更を戻すには、2つのオプションがあります:
git checkout <filename>
git reset --hard <filename>
新しい置換コミットを作成することで、以前のコミットを取り消します。
git revert <commit-sha>
最後のコミットに対する新しいメッセージの作成
git commit --amend
最後のコミットにファイルを追加
git add <filename>
git commit --amend
コミットメッセージを編集したくない場合は、commit
コマンドに--no-edit
を追加してください。
貯蔵
隠し場所の変更
git stash save
stash
のデフォルトの動作は保存です:
git stash
変更を保存しない
git stash apply
隠した小銭を破棄
git stash drop
隠した変更を適用してドロップ
git stash pop
参考文献とログ
reflogを使用して、HEADへの参照変更のログを表示します。
git reflog
ファイルの git 履歴の確認
ファイルのgit履歴をチェックする基本コマンドです:
git log <file>
このエラーメッセージが表示された場合:
fatal: ambiguous argument <file_name>: unknown revision or path not in the working tree.
Use '--' to separate paths from revisions, like this:
ファイルの git 履歴を確認する場合に使用します:
git log -- <file>
特定のSHAを含むタグの検索
git tag --contains <sha>
ファイルへの各変更内容のチェック
gitk <file>
ファイルへの各変更の内容をチェックし、過去のファイル名を追跡します。
gitk --follow <file>
デバッグ
GitコマンドにカスタムSSHキーを使う
GIT_SSH_COMMAND="ssh -i ~/.ssh/gitlabadmin" git <command>
デバッグクローニング
SSHで:
GIT_SSH_COMMAND="ssh -vvv" git clone <git@url>
HTTPSで:
GIT_TRACE_PACKET=1 GIT_TRACE=2 GIT_CURL_VERBOSE=1 git clone <url>
git 組み込みトレースによるデバッグ
gitには、例えばGitコマンドをデバッグするためのトレース一式が含まれています:
-
GIT_TRACE_PERFORMANCE=1
:パフォーマンスデータのトレースを可能にし、各特定のgit
呼び出しにかかる時間を表示します。 -
GIT_TRACE_SETUP=1
:git
がリポジトリや環境について発見していることをトレースすることができます。 -
GIT_TRACE_PACKET=1
ネットワークオペレーションにおけるパケットレベルのトレースを可能にします。
リベース
ブランチを master にリベースします。
iフラグは「インタラクティブ」を表します:
git rebase -i master
一時停止している場合は、リベースを続行します。
git rebase --continue
用途git rerere
同じ問題を繰り返し解決するために、記録された解決策を_再利用_すること:
git rerere
rerere
機能を有効にします:
git config --global rerere.enabled true