8

git flowを使用して、 で 2 つのブランチを作成しましgit flow feature start <feature name>た。までに終わったか覚えていない

  1. git flow feature finish両方のブランチで使用し、
  2. Aブランチをブランチにマージし、ブランチBを削除してから、ブランチからA実行する、またはgit flow feature finishB
  3. ブランチBdevelopwithgit flow feature finishにマージしてから、ブランチAdevelopwithgit mergeにマージし、マージの競合を解決してから、 with でブランチを削除Aしますgit branch -d <branch name>

私が見つけることができるgit reflogブランチの最後のトレースを使用することはシリーズにあります:Ae553bf0

e553bf0 HEAD@{40}: checkout: moving from feature/a to develop
6b30050 HEAD@{41}: checkout: moving from develop to feature/a
e553bf0 HEAD@{42}: checkout: moving from feature/a to develop
6b30050 HEAD@{43}: checkout: moving from develop to feature/a
e553bf0 HEAD@{44}: commit (merge): resolved merge conflicts
7a0ad6b HEAD@{45}: checkout: moving from feature/a to develop
6b30050 HEAD@{46}: checkout: moving from develop to feature/a
7a0ad6b HEAD@{47}: merge feature/b: Merge made by the 'recursive' strategy.
921ae46 HEAD@{48}: checkout: moving from feature/b to develop

また、git logショー

commit e553bf07272ab2b1975917b736b37127636c0db1
Merge: 7a0ad6b 6b30050
Author: Eric Baldwin <address-here>
Date:   Thu Jul 25 14:58:49 2013 -0400

    resolved merge conflicts

commit 7a0ad6b2277c0c0a7599193829f68517ac708ca2
Merge: 921ae46 02558b6
Author: Eric Baldwin <address-here>
Date:   Thu Jul 25 14:03:56 2013 -0400

    Merge branch 'feature/b' into develop

両方の機能のコードは現在 にありますがdevelop、マージが行われた順序はわかりません。履歴に基づいて、3 つのシナリオのどれが発生したか教えてもらえますか?

編集:

からの出力git log --oneline --graph develop:

* 2ebb938 misc
*   69f95f6 Merge 'feature/x' into 'develop' merge conflicts
|\  
| * 8b9b275 Merge 'develop' with feature/x; minor merge tweaks
| * eb89630 misc
| * 54884d2 misc
| *   76f02bb Merge branch 'develop' into feature/x
| |\  
| * | d06d673 misc
| * | 0ba5235 misc
* | | 5489590 misc
* | | a215bd2 misc
* | | 4aacaa7 misc
* | |   e553bf0 resolved merge conflicts
|\ \ \  
| * | | 6b30050 fixed test db error
| * | |   64909f9 Merge branch 'develop' into feature/a
| |\ \ \  
| * \ \ \   e7319e1 Merge branch 'develop' into feature/a
| |\ \ \ \  
| * | | | | 410786b misc
| * | | | | 67267f3 misc
| * | | | | ae4b800 misc
| * | | | |   9e281eb Merge branch 'develop' into feature/a
| |\ \ \ \ \  
| * | | | | | f8fa2ec misc
* | | | | | |   7a0ad6b Merge branch 'feature/b
|\ \ \ \ \ \ \  
| * | | | | | | 02558b6 ready to merge
| * | | | | | |   cc07f79 Merge branch 'develop' into feature/b
| |\ \ \ \ \ \ \  
| | | |_|_|/ / /  
| | |/| | | | |   
| * | | | | | | 4b6610f misc
| * | | | | | |   25e509b Merge branch 'develop' into feature/b
| |\ \ \ \ \ \ \  
| | | |_|_|/ / /  
| | |/| | | | |   
| * | | | | | |   df5640d merged with develop
4

1 に答える 1

5

A最初に でブランチを開発にマージしたようです7a0ad6b。その後どうなったかは定かではありません。出力によると、develop at にgit logマージした可能性があるようです:Be553bf0

* | |   e553bf0 resolved merge conflicts
|\ \ \  
| * | | 6b30050 fixed test db error
| * | |   64909f9 Merge branch 'develop' into feature/b

しかし、あなたのreflogによると、6b30050実際にはfeature/a:

6b30050 HEAD@{43}: checkout: moving from develop to feature/a
e553bf0 HEAD@{44}: commit (merge): resolved merge conflicts

出力を質問にコピーするときに、誤ってブランチ名を混同しませんでしたか?

reflogだけ見ると

reflogあなたのオリジナルだけに基づいて、最初にブランチBdevelopマージしてからブランチをマージしようとしA、競合を解決してからコミットしたようです:

# Checkout develop
e553bf0 HEAD@{42}: checkout: moving from feature/a to develop

# Checkout branch A
6b30050 HEAD@{43}: checkout: moving from develop to feature/a

# Merge branch A? Resolve conflicts and commit
e553bf0 HEAD@{44}: commit (merge): resolved merge conflicts

# Checkout develop
7a0ad6b HEAD@{45}: checkout: moving from feature/a to develop

# Checkout branch A
6b30050 HEAD@{46}: checkout: moving from develop to feature/a

# Merge branch B into develop
7a0ad6b HEAD@{47}: merge feature/b: Merge made by the 'recursive' strategy.

# Move from branch B to develop (i.e. checkout commit 921ae46)
921ae46 HEAD@{48}: checkout: moving from feature/b to develop

マージされたブランチの履歴を表示する

どのマージがどれであるかがわかったら、次を使用してブランチのログを表示できるはずです

git log --oneline --graph <sha of merge into develop>^2

これは、マージ コミットの 2 番目の親の履歴を表示することを意味します。これは、git フローを使用している場合、機能ブランチのヒントになります。

それが役立つ場合は、ユーザーファイルdevelopでこのエイリアスを使用して、作成日とコミット日の両方でブランチの履歴を表示することもできます。.gitconfig

[alias]
    datelog = log --format=\"%C(yellow)%h%C(reset) %C(cyan dim)%ad %C(red bold)%cd %C(reset)%s\" --graph

最初に作成日が青で表示され、次にコミット日が赤で表示されます。Acommit-date を使用すると、最初にブランチまたはB開発にマージされたかどうかを判断できる場合があります。を使用して、作成日とコミット日の両方を取得することもできますgit log --format=fuller

マージよりもリベースを好む (通常)

最後に、方法を知っていますかrebase? の代わりに to syncdevelopを使用すると、sync/merge コミットでブランチ履歴が汚染されるのを避けることができます。rebasemerge

# From feature branch X, sync with develop
git rebase develop

# Switch to develop and merge
# (either fast-forward or merge commit, your choice)
git checkout develop
git merge --no-ff X
于 2013-08-05T02:47:30.617 に答える