リモートリポジトリにまだプッシュされていない、自分が行ったローカルコミットを表示するにはどうすればよいですか?ときどき、git status
私のブランチがXコミットの前にあることを出力しますorigin/master
が、常にではありません。
これはGitのインストールのバグですか、それとも何かが足りませんか?
git log origin/master..HEAD
同じ構文を使用して差分を表示することもできます
git diff origin/master..HEAD
まだプッシュされていないすべてのブランチのすべてのコミットを見たい場合は、次のようなものを探しているかもしれません:
git log --branches --not --remotes
また、各ブランチの最新のコミットとブランチ名のみを表示したい場合は、次のようにします。
git log --branches --not --remotes --simplify-by-decoration --decorate --oneline
ローカルにあるがアップストリームにはないすべてのコミットを表示できます
git log @{u}..
@{u}
または@{upstream}
、現在のブランチのアップストリームブランチを意味します(git rev-parse --help
またはgit help revisions
を参照)。
これは私のために働いた:
git cherry -v
Gitで示されているように: See all unpushed commits or commits that are not in another branch .
あなたはこれを行うことができますgit log
:
git log origin/master..
origin
これは、がアップストリーム リモートmaster
の名前であり、アップストリーム ブランチの名前であると想定しています。後にリビジョン名を..
省略するHEAD
と、プッシュされていない新しいコミットが一覧表示されます。
私は以前にコミットを行いましたが、どのブランチにもプッシュされず、リモートでもローカルでもありませんでした。コミットだけ。他の回答からは何もうまくいきませんでしたが、次の場合:
git reflog
そこで私のコミットを見つけました。
現在のブランチでプッシュされていないコミットを探すための便利な git エイリアス:
alias unpushed = !GIT_CURRENT_BRANCH=$(git name-rev --name-only HEAD) && git log origin/$GIT_CURRENT_BRANCH..$GIT_CURRENT_BRANCH --oneline
これが基本的に行うこと:
git log origin/branch..branch
現在のブランチ名も決定します。
あなたは試すことができます....
gitk
これが純粋なコマンド ライン オプションではないことは承知していますが、インストールして GUI システムを使用している場合は、探しているものに加えて、さらに多くの機能を正確に確認するための優れた方法です。
(実際、これまで誰も言及していないことにちょっと驚いています。)
git branch -v
ローカルブランチごとに、それが「進んでいる」かどうかが表示されます。
次のエイリアスを使用して、コミットされたがプッシュされていないファイル (およびステータス) のリストのみを取得します (現在のブランチの場合)。
git config --global alias.unpushed \
"diff origin/$(git name-rev --name-only HEAD)..HEAD --name-status"
次に、次のようにします。
git unpushed
これを行う最も一般的な方法は、次のようなものを実行することだと思います。
git cherry --abbrev=7 -v @{upstream}
しかし、私は個人的に実行することを好みます:
git log --graph --decorate --pretty=oneline --abbrev-commit --all @{upstream}^..
これは、アップストリームにマージされていないすべてのブランチからのコミットと、アップストリームの最後のコミット(他のすべてのコミットのルートノードとして表示されます)を示します。私はそれを頻繁に使用するので、そのエイリアスnoup
を作成しました。
git config --global alias.noup \
'log --graph --decorate --pretty=oneline --abbrev-commit --all @{upstream}^..'
これはバグではありません。おそらく表示されるのは、リモートからの変更がフェッチされたがまだマージされていない自動マージが失敗した後の git ステータスです。
ローカル リポジトリとリモート間のコミットを表示するには、次のようにします。
git fetch
これは 100% 安全で、作業コピーをモックアップしません。変更があった場合はgit status
表示されX commits ahead of origin/master
ます。
ローカルではなくリモートにあるコミットのログを表示できるようになりました。
git log HEAD..origin
これは私にとってはうまくいきました:
git log --oneline @{upstream}..
また:
git log --oneline origin/(remotebranch)..
すべてのブランチでプッシュされていないすべてのコミットを簡単に一覧表示するには、次のコマンドを使用できます。
git log --branches @{u}..
指定された作業ディレクトリ内のすべての Git、Mercurial、および Subversion リポジトリをスキャンし、ucommited ファイルと unpushed コミットのリストを表示するunpushedという名前のツールがあります。Linux でのインストールは簡単です。
$ easy_install --user unpushed
また
$ sudo easy_install unpushed
システム全体にインストールします。
使い方も簡単です:
$ unpushed ~/workspace
* /home/nailgun/workspace/unpushed uncommitted (Git)
* /home/nailgun/workspace/unpushed:master unpushed (Git)
* /home/nailgun/workspace/python:new-syntax unpushed (Git)
詳細についてはunpushed --help
、または公式の説明を参照してください。またunpushed-notify
、コミットされていない変更やプッシュされていない変更を画面上で通知するための cronjob スクリプトもあります。
やり方の 1 つは、あるブランチでは利用できるが別のブランチでは利用できないコミットを一覧表示することです。
git log ^origin/master master
プッシュされていないコミットの数が 1 桁の数字である場合 (よくあることですが)、最も簡単な方法は次のとおりです。
$ git checkout
git は、オリジンに対して「N コミット進んでいる」ことを伝えることで応答します。したがって、ログを表示するときは、その数を覚えておいてください。「コミットが 3 つ進んでいる」場合、履歴の上位 3 つのコミットはまだ非公開です。
git diff origin
ブランチがオリジンを追跡するように設定されていると仮定すると、違いが表示されるはずです。
git log origin
コミットの概要を提供します。