便利な 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