私はブランチをマスターにマージしましたが、今ではgit log
しばらく時間が経過したので、以前に(そのコミットで)マスターをリモートにプッシュしたかどうかを知りたい。プッシュされたかどうかはどうすればわかりますか?
リポジトリを別の場所に再クローンする、リセットして確認してから再マージするなど、いくつかの回避策を考えることができますが、おそらくもっと簡単な答えがあると思います。
これはfyiとは異なります ブランチが既にマスターにマージされているかどうかをgitで知るにはどうすればよいですか? マージされたことがわかっているので、リモートプッシュについて知らないだけです。
行う
> git status
出力が
# On branch master
nothing to commit, working directory clean
次に、現在のコミットをプッシュしました。
代わりに出力が次で始まる場合
# On branch master
# Your branch is ahead of 'Origin/master' by 1 commit.
# (use "git Push" to publish your local commits)
次に、まだプッシュされていないローカルコミットがあります。これは、リモートブランチOrigin/master
が、最後にOriginにプッシュされたコミットを指しているためにわかります。ただし、ブランチはahead of 'Origin/master'
です。つまり、最後にプッシュされたコミットの後に作成されたローカルコミットがあります。
興味のあるコミットが最新でない場合は、行うことができます
> git log --decorate --oneline
問題のコミットがOrigin/master
が指すコミットの前か後かを確認します。
コミットがOrigin/master
より後(ログの上位)の場合、プッシュされていません。
複数のコミットを行い、どれがリモートにプッシュされたかがわからない場合は、次のことを試してください。
git log Origin/<remote-branch>..<local-branch>
例:
git log Origin/master..master
これにより、前述のリモートブランチにプッシュされていないローカルブランチのすべてのコミットがリストされます。
プログラムでそれを行うソリューション:
test "$(git rev-parse @{u})" = "$(git rev-parse HEAD)"
ローカルディレクトリがクリーンかどうかを確認することもできます。コミットされていない変更されたファイルはありません。
test -z "$(git status --porcelain)"
ルールの1つが成立しない場合にスクリプトを終了するには、次のようなコードを使用できます。
test your_condition || (echo "ERROR: you have local changes"; exit 1)
これを実行することをお勧めします:
$ git fetch --all
Fetching Origin
Fetching upstream
これにより、すべてのリモートから最新のデータが取得されます。
次に、実行します:
$ git branch -v
master ef762af [ahead 3] added attach methods
* testing 4634e21 added -p flag
upstream 1234567 [ahead 1, behind 7] updated README.md
これにより、どのブランチが先か後ろかがわかります。
他のどの回答もリモートデータのフェッチについて言及していないため、これを投稿しました。そのステップは重要です。
git log --graph --all --decorate
、各参照が配置されている場所を示します(ヘッド、マスター、オリジン/マスターなど)
これを試して。 git branch -r --contains <sha1>
私のリポジトリのコミットの場合、リモート開発ブランチに存在することがわかります
git branch -r --contains 7914e54ea7e30c7f446e791df66bd3a5805c978a
Origin/develop