どのように私はgitのコミットが他のコミットの親であるかどうかを検出することができますか?

StackOverflow https://stackoverflow.com/questions/3435010

  •  26-09-2019
  •  | 
  •  

質問

私はいくつかの些細な変更を行い、その後のgitにそれらをコミットするスクリプトを書いています。具体的には、他の支店の歴史とは限らない「までの混乱」を修正するとき - これらは些細な変化であるので、私はそれで逃げることができたときにgit commit --amendをしたいです。混乱別のブランチまで、私が代わりに標準git commitをしたいと思う改正する場合。

たとえば、私の枝が、この(GitのGUIでラ・「見える化すべての分岐履歴」)のように見えた場合:

* [experimental branch] Added feature.
* [master branch] Trivial change from script
* ...

と私は実験的なブランチの歴史の一部を交換することになるので、私は、その後、私は修正を行うにはしたくない、masterブランチ上でこのスクリプトを実行していますよ。元はまだ実験の歴史の一部になるコミットし、まだそれは、ガベージコレクションを取得しないように参照されます - - 技術的には、これは実際には何も中断されませんが、中にはほぼ-が、-かなり-同一ではないコミットを持ちます二つの異なる枝それは私が避けたい状況ですので、私は後で、リベースまたはマージしたいときに生活が困難になります。

私は私のスクリプトを自動的にコミットするかどうかを検出することができますどのようにそれから分岐何かを持っている?

仮定のヘルプを簡素化した場合、私はいつも主人の頭の上にこのスクリプトを実行し、私は唯一のローカルリポジトリとしてのgitを使う - 。私はプッシュしていないか、プルはどこにでも変更

私はどちらかのgitコマンドラインに殻から取り出すことができ、または私はgitのためのRubyバインディングを使用することができますので、このスクリプトは、Rubyである - 。この作業は簡単になるだろう方

役に立ちましたか?

解決

このコミット「を含有」というブランチのリストを取得するには、

ただ、実行git branch --contains HEAD。リストが空の場合は、そのコミットはammendingのために安全でなければなりません。また、リスト、ローカルとリモートのブランチに-aフラグを含めることができます。

また、あなたはgit rev-parse HEADgit merge-base HEAD other-branchの出力を比較することができます。これらのIDは同じですコミットした場合、現在は他の分岐年代にコミットコミット履歴ます。

他のヒント

グラフは一方通行であるコミット:コミット与え、あなたはその祖先のすべてを知っているが、いないその子の。あなたが望むことをあなたが(s)はコミットされるまで、エンドポイントとバックトラックで開始する必要があります。

使用git rev-list [some commit] --children(HEADがデフォルトです):

$ git rev-list HEAD --children
6edbee61c87fb063700751815f0ad53907d0b7a4
aee452860ecd772b8bdcd27227e6a72e6f4435fd 6edbee61c87fb063700751815f0ad53907d0b7a4
ef8a1487b03256a489d135e76d1f0b01872f2349 aee452860ecd772b8bdcd27227e6a72e6f4435fd
6910dc5833f6cd26133e32bef40ed54cf9337017 ef8a1487b03256a489d135e76d1f0b01872f2349
bbef0da56efe048f70293bd20bad0cb37b5e84f0 6910dc5833f6cd26133e32bef40ed54cf9337017
[...]

左側の列は、新しい順にコミットSHA-1Sのリストです。コミットそのために何がその権利の子どもたち(--children)がコミットされています。トップはHEADであるため、子を持たないコミットます。

このように、あなたはSHA-1このリスト内をgrepして、その右に何かを持っている場合、それは持っている少なくとも一人の子供ます:

$ git rev-list --children | grep '^6910'
6910dc5833f6cd26133e32bef40ed54cf9337017 ef8a1487b03256a489d135e76d1f0b01872f2349

上記の例では、6910...子を有するコミットef8a...

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top