「git」で未プッシュのコミットをリストする方法 (ローカルのみ、originにはない)
日本語:
「git」を使って、ローカルのレポジトリに存在するが、リモートの「origin」にはまだプッシュされていないコミットをリストする方法です。
コマンド:
git log --no-merges --not --since=<start_date> --until=<end_date> --pretty=format:%h %s
オプションの説明:
--no-merges
: マージコミットを除外します。--not
: 指定された条件に一致しないコミットをリストします。--since=<start_date>
: 指定された日付以降のコミットをリストします。--pretty=format:%h %s
: コミットのハッシュとメッセージをフォーマットして表示します。
例:
過去1週間のコミットをリストする:
git log --no-merges --not --since=1 week ago --pretty=format:%h %s
- 「origin」は通常、デフォルトのリモートブランチです。
git push
コマンドを使って、ローカルのコミットを「origin」にプッシュすることができます。git diff
コマンドを使って、ローカルの変更とリモートとの差分を確認することができます。
未プッシュコミット一覧取得の例と解説
コマンドの分解と解説
先ほど紹介したコマンドをもう一度見てみましょう。
git log --no-merges --not --since=<start_date> --until=<end_date> --pretty=format:%h %s
- git log: コミット履歴を表示する基本コマンドです。
- --no-merges: マージコミット(複数のブランチを統合したコミット)を除外します。
- --not: 指定した条件に合致しないコミットをリストします。この場合、
--since
と--until
で指定した期間外のコミットを除外します。 - --pretty=format:%h %s: 表示形式を指定します。
%h
: コミットの短いハッシュ値%s
: コミットメッセージ
つまり、このコマンドは、「指定した期間内の、マージではないコミットのうち、ローカルにあってリモートにはまだプッシュされていないコミット」をリストする、ということです。
具体的な例
- 過去1週間の未プッシュコミット:
git log --no-merges --not --since=1.week.ago --pretty=format:%h %s
- 2023年1月1日から2023年1月31日までの未プッシュコミット:
git log --no-merges --not --since="2023-01-01" --until="2023-02-01" --pretty=format:%h %s
- コミットハッシュ全体と著者:
git log --pretty=format:"%H (%an)"
- コミットメッセージのみ:
git log --pretty=format:%s
より詳細な情報
- 変更されたファイル:
git log -p
- 統計情報:
git log --stat
注意点
- リモートブランチ: 上記のコマンドは、デフォルトのリモートブランチ(通常は
origin
)との比較を行います。 - ブランチ: 特定のブランチのコミット履歴を見るには、
git log <branch_name>
のようにブランチ名を指定します。 - コミットの取り消し:
git reset
コマンドを使うと、コミットを取り消すことができます。ただし、慎重に扱う必要があります。
このコマンドを使うことで、ローカルで作業した内容が、リモートに反映されているか、あるいはどこまで反映されているかを簡単に確認することができます。開発の過程で、どのコミットをいつ行ったのかを把握する上で非常に役立つでしょう。
git help log
Git GUIツールを使う
多くのGit GUIツール(SourceTree、GitHub Desktopなど)は、視覚的にコミット履歴を確認できる機能を持っています。通常、ローカルとリモートの差分を色分け表示したり、未プッシュのコミットを明確に示したりします。
- メリット:
- 直感的な操作で、コミット履歴をグラフィカルに把握できる。
- ブランチの分岐やマージなども視覚的に確認しやすい。
- デメリット:
Gitkを使う
Gitkは、Gitに標準で付属しているテキストベースのグラフィカルなコミットブラウザです。gitk
コマンドを実行するだけで、コミット履歴を視覚的に確認できます。
- メリット:
- コマンドラインとGUIの両方の特徴を併せ持つ。
- 複雑なコミット履歴も比較的簡単に追跡できる。
- デメリット:
スクリプトで自動化
BashやPythonなどのスクリプト言語を使って、git log
コマンドを組み込み、より複雑な処理を行うことができます。例えば、未プッシュコミットの数を数えたり、特定のファイルの変更履歴を抽出したりできます。
- メリット:
- 柔軟性が高く、様々なカスタマイズが可能。
- CI/CDパイプラインなど、自動化の場面で活用できる。
- デメリット:
Gitのフック機能を使う
Gitのフック機能を使うと、特定のイベントが発生した際に、あらかじめ設定しておいたスクリプトを実行することができます。例えば、コミットする前に未プッシュコミットがあるかどうかをチェックする、といったことができます。
- メリット:
- デメリット:
どの方法を選ぶかは、あなたの作業スタイルや、どのような情報を取得したいかによって異なります。
- 手軽に確認したい場合: Git GUIツール
- 詳細な情報を取得したい場合:
git log
コマンドやGitk - 自動化したい場合: スクリプトやGitのフック機能
これらの方法を組み合わせることで、より効率的にGitを扱うことができます。
- SourceTreeで未プッシュコミットを確認: SourceTreeの「変更」タブで、ローカルリポジトリとリモートリポジトリの差分を確認できます。
- Bashスクリプトで未プッシュコミット数をカウント:
unpushed_commits=$(git log --oneline --no-merges --not --since=1.week.ago | wc -l) echo "未プッシュコミット数は $unpushed_commits 件です"
git git-commit git-diff