私の実際のブランチがどのブランチから派生しているのか見たいのですが。私はすでにログを見ましたが、それは非常に騒々しいです、そして、私はこの場合に正しいブランチを見つけることを100%確実にしたいと思います。私の実際のブランチがどのブランチから派生したかを見るためにどのようなコマンドを使用しますか?
答えて
この問題はすべての場合に答えることはできません。 ブランチは永続的ではありません。ブランチを自由に動かすことができます。 reflogにより、のブランチの履歴が表示されますが、reflogはローカルのみで、90日(デフォルト)に制限されます。
あなたのレポでこのブランチの最初の発生を取得するためにgit reflog <branch>
を使用することができます。この例では
$ git reflog branch | tail -n 1
03302d2 [email protected]{12}: branch: Created from HEAD
、03302d2
を最初にそのブランチのコミットされています。 次に、find the branches that the parent of this commit came fromとすることができます。たとえば、あなたが
$ git branch --contains 03302d2^
を行うことができ は、より洗練された方法のためにリンクの質問を参照してください。しかし、この検索は完全ではなく、 "正しい"ブランチを見逃している可能性があることに再度注意してください。
代替方法を追加します。あなたはまた、元が2列目にコミット一覧表示されます-v
git branch -v
とGitのブランチを使用することができます。
次は近づいていますが、の制限を参照してください。
git branch --contains $(
git for-each-ref --format='%(refname)' refs/heads/ |
xargs git merge-base --fork-point)
アイデア
我々は、SHA-1のようにフォーク・ポイントを得るためにgit merge-base --fork-point
を使用しています。 merge-base
は、チェックするためにブランチ名が必要です。したがって、マスターと私の現在のブランチの間のフォークポイントはかなり簡単です。
私たちはすべての支店を確認したいので、git for-each-ref --format='%(refname)' refs/heads/
を使用しています。その後、SHA-1を取得します。支店名を取得するために、我々はgit branch --contains
制限
その周りの制限のかなり多くがありますを使用しています。リポジトリがどこから来ているのかをよく知っているだけですが、gitではブランチの出所を決めるのは難しいです。たとえば、取る
o -- o
/ ^branch-a
o -- X -- o -- o
\ ^branch-b
o -- o -- o
^branch-c
branch-c
はどのブランチから来たのですか?両方のブランチにX
iとマークされたコミットbranch-a
とbranch-b
。だからどちらかから来たのかもしれない。 GitリポジトリでGitの
支店で
枝がコミットするための簡単なポインタです。ブランチが指しているコミットのすべての祖先は、ブランチの一部です。:b
、c
、d
はmaster
の一部であるが
a -- b -- c -- d <master
\
d -- e <foo
a
、b
は、master
とfoo
両方の一部です。しかし、ブランチはポインタの名前に過ぎません。新しい名前はd
に設定することができます。今
a -- b -- c -- d <master
\ ^bar
d -- e <foo
master
上のすべてがbar
にもあります。ブランチはバージョン管理されていないので、特定の時点でブランチがどこを指していたのかという質問には答えられません。したがって、foo
がどこから分岐したのかを明確に判断することはできません。 Gitはブランチの動きを追跡するが、時間の経過とともに失効するreflogを提供します。
結論
ザ・唯一のgitに言うべき事が原因であること可変枝の性質のために、SHA-1などフォーク点で保存します。しかし、git merge-base --fork-point
には、実際のフォークポイントであるSHA1が返されます。ローカルリポジトリ、TYPEコマンドの現在のディレクトリ/パスで
'--fork-point' *はreflogを使用するので、このメソッドも保証されません。 reflogから "created from"メッセージを検索する方が簡単かもしれません。しかし、そのエントリが期限切れになっていて、 '--fork-point'が何かを見つけたら、"何か "が役に立つかもしれません。もちろん、現在のマージベースをヒントとして使用することもできます(実際には、reflogエントリが期限切れになった場合に '--fork-point'が返されます)。 – torek
:
git log --oneline --decorate --graph
(リポジトリhttps://github.com/spring-projects/spring-boot.gitの分岐構造)
あなたのブランチのパスが表示されます。
- 1. ローカルブランチがリモートサーバー上のブランチから派生しているかどうかはどのようなgitコマンドで知ることができますか?
- 2. 私のgitブランチがどのようなSVNブランチにdcommitするのかをどのようにして見つけることができますか?
- 3. どのようにマージするためにマージされたgitブランチを一覧表示し、ブランチがうまく見えたら削除できますか?
- 4. 私のブランチからスパンしたgitブランチをマージするには?
- 5. 既存のブランチから分岐した場合、どのブランチがプッシュしたコードを取得しますか?
- 6. 特定のブランチから新しいブランチを作成しないようにするためのGitフック
- 7. このブランチはどのgitブランチからチェックアウトされましたか?
- 8. このランダムなgitブランチはどこから来ましたか?
- 9. 複数のブランチを結合し、gitのブランチ数を減らすにはどうしたらいいですか?
- 10. 私の新しいブランチはどこから分岐しましたか
- 11. ブランチが別のブランチにマージされたかどうかを確認する方法はありますか?
- 12. 私が作成したブランチを削除し、すべてを元のブランチの最後のコミットに戻すにはどうしたらいいですか?
- 13. Gitは拡張ブランチ開発のためのリベースを見逃しましたか?
- 14. 裸のレポのブランチから最後のコミットをコミットしないにはどうしたらいいですか?
- 15. pytestはテストファイルを実行するためにどのようなコマンドを使用しますか?
- 16. Gitのマージ - マージされたブランチはどうなりますか?
- 17. 中間コードからフィルタ・ブランチをgitのためにどのようにしてもgitのステータス
- 18. 新しく作成されたブランチがどのブランチに基づいているかをどのように知っていますか?
- 19. githubのブランチをどのようにマージするのですか?
- 20. コマンド(ICommandから派生したもの)がビューモデルにアクセスするにはどうすればいいですか
- 21. サブブランチのトランクにブランチをマージした後、そのブランチを削除しますか?
- 22. 特定のブランチを別のリポジトリのブランチにどのようにミラーリングしますか?
- 23. Git - ブランチが別のブランチにマージされたかどうかを確認するには?
- 24. GitHubは、2つのブランチを自動マージできるかどうかをどのようにチェックしますか?
- 25. Pythonどのようにしてtxtファイルから派生したリストからクラスを作成できますか?
- 26. Git masterブランチから別のブランチにフォルダをコピーします
- 27. git - ブランチをマスタのように見えるように戻しますか?
- 28. gitブランチはどのように使うべきですか?
- 29. 偶然のGIT復帰をブランチから元に戻すにはどうしたらよいですか?
- 30. GITを使用したVS2015ブランチからトランクへのマージ
Martin Nyoltの答えは実行可能な解決策です。将来的には、分岐したブランチからのハイフン(例:development-newFeature)で名前を付けることをお勧めします。あるいは、常にブランチを作成するブランチを1つ選択することもできます(つまり、devは常にマスターからブランチ、devは常にブランチとなります)。しかし、究極的には、これはあなたが決めるワークフローによって決まります。 – nullverb