どのように私は歴史の中で、「マージイベント」を参照してくださいか? -- git フィールド と github フィールド と merge フィールド 関連 問題

How do I see “merge events” in history?












0
vote

問題

日本語

私はGitHubのWebインターフェイスとGitのCLIを使用しています。以下のための回答のいずれかまたは両方が評価されています。

私は別のブランチにブランチをマージするとき、

は時々、私はGitHubの歴史の中で「other_branchへのマージブランチ 『マスター』」のようなメッセージをコミット参照してください。しかしいつもではない。だから私は歴史の内側に、すべての「マージイベント」を参照してくださいどのように行う?

私は(グラフなど)の枝とマージを示す縦線の眺めを得ることができたとしても優れている場合。

英語

I use the GitHub web interface and the git cli. Answers for either or both are appreciated.

Sometimes, when I merge a branch into another branch, I see a commit with a message like "Merge branch 'master' into other_branch" in the GitHub history. But not always. So how do I see all "merge events", inside the history?

Even better if I can get a view with vertical lines showing branches and merges (like a graph).

</div
        

回答リスト

1
 
vote
vote
ベストアンサー
 

all マージイベントを回復することは必ずしも不可能ですが、それは直感的です。最も可能性の高い理由は、(または誰かが誰かが)マージを求めたときに、「早送り」が可能であった(そしてマージオプション<コード> --no-ff は与えられなかった)ので、「真のマージ」はいませんでした。実行されました。例えば:

<事前> <コード> X -- X -- X -- A <--(master) X -- X -- X -- B <--(branch)

この場合、ブランチが発散しているため、早送りはできませんので、マージがマージコミットを表示します。

<事前> <コード> git checkout master git merge branch X -- X -- X -- A -- M <--(master) / X -- X -- X -- B <--(branch)

しかし

があれば <事前> <コード> X --- X --- A <--(master) x --- x --- B <--(branch)

これでブランチを作成しましたが、 master に新しい作業はありませんでしたので、ブランチは分岐していません。代わりにもう一方の後ろにある。それを禁止しない場合は、マージしたときに早送りが発生します。

<事前> <コード> git checkout master git merge branch X --- X --- A --- x --- x --- B <--(branch)(master)

マージが発生した記録はありません、そして「Merge Event」を回復する方法はありません。 (これが起こったローカルレポでは、それを理解するために使用される可能性のあるリフグエントリがあります。しかし、リフォームエントリは一時的であり、リモートと共有されていません。そのため、すべての実用的な目的での記録をカウントすることはできません。マージします。)

さらに、リニアの歴史が「クリーナー」であることを誓う人がたくさんあります(その歴史がまったく構築されテストされたことがないコミットであったとしても)、彼らは故意に彼らのコミットトポロジを許可するために彼らのコミットトポロジを並べ替えます。早送りするようにマージします。そして、特別な場合に使用されるコードの行を組み合わせるための他の技術があります。

あなたの質問にはどういう意味ですか?

最初に、すべてのマージイベントが記録されているわけではありません。マージイベントが後で守られるように録音されていることを確認したい場合は、をでマージする必要があります( --no-ff オプション(なしで)。 em> --squash オプション)。

2番目に、GITログ出力は通常、記録されたすべてのマージイベントを表示します。歴史の単純化がマージを除外する場合は考えることはできませんが、該当する場合は、 --full-history をlogコマンドに追加できます。マージだけ( --merges )を見るように依頼することもできます。

X -- X -- X -- A <--(master) X -- X -- X -- B <--(branch) 0 のブランチのグラフィカルビューを取得することも、 X -- X -- X -- A <--(master) X -- X -- X -- B <--(branch) 1 のようなGUIを使用してもよい。

デフォルトでは、視聴方法/マージについて言及したコマンドのいずれかで、現在チェックされているコミット(ヘッド)から到達可能なものだけが表示されます。すべてを見たい場合は、 X -- X -- X -- A <--(master) X -- X -- X -- B <--(branch) 2 を指定してください。ブランチのリストから到達可能なものすべてを見たい場合は、ブランチを一覧表示します。

 

It's not always possible to recover all merge events, counter-intuitive though that seems. The most likely reason is that, when you (or someone) asked for a merge, a "fast-forward" was possible (and the merge option --no-ff was not given) so no "true merge" was performed. For example:

X -- X -- X -- A <--(master)      X -- X -- X -- B <--(branch) 

In this case a fast-forward is not possible because the branches have diverged, so after a merge you will see a merge commit.

git checkout master git merge branch  X -- X -- X -- A -- M <--(master)                  /   X -- X -- X -- B <--(branch) 

but if you had

X --- X --- A <--(master)                                x --- x --- B <--(branch) 

now you created a branch, but there hasn't been any new work on master so the branches haven't diverged. Instead one is just behind the other. If you don't forbid it, a fast-forward will occur when you merge.

git checkout master git merge branch  X --- X --- A --- x --- x --- B <--(branch)(master) 

There is no record of a merge having occurred, and no way to recover the "merge event". (In the local repo where this took place, there is a reflog entry that could be used to figure it out; but reflog entries are temporary and are not shared with remotes, so for all practical purposes you can't count on any record of the merge.)

Moreover, there are lots of people who swear that a linear history is "cleaner" (even if that history ends up made mostly of commits that have never been built and tested), so they deliberately rearrange their commit topology to allow every merge to be a fast-forward. And there are other techniques for combining lines of code that are used in special cases.

So what does it mean for your question?

First, not all merge events are recorded. If you want to make sure your merge events are recorded so that they can be observed later, then you must always merge with the --no-ff option (and without the --squash option).

Second, the git log output will generally show all of the merge events that were recorded. I can't think of a case where history simplification would exclude a merge, but if you're concerned you can add --full-history to the log command. You can even ask to see just the merges (--merges).

You also can get a graphical view of the branches with git log --graph, or by using a gui like gitk.

Note that by default any of the commands I mentioned for viewing commits/merges will only show those reachable from your currently-checked-out commit (HEAD). If you want to see everything, specify --all; if you want to see everything reachable from a list of branches, list the branches.

</div
 
 

関連する質問

2  どのSCM / VCSがファイル間でテキストを移動してうまく対応していますか?  ( Which scm vcs cope well with moving text between files ) 
私たちのVCSがファイル間で情報を移動するときにいくつかのひどいマージをしているため、私たちのプロジェクトで私たちのプロジェクトを持っています。 シナリオは次のようにしています: 辞書からの用語に関する情報を含むファイルがたくさんあるので、アルファベットの各...

4  Merge ToolStrip MDIの子 - 親  ( Merge toolstrip mdi child parent ) 
インターネット上のいくつかの情報を見つけましたが、何も私を助けました。 Parent MDIフォームにツールストリップをマージする方法は? 編集: このコードで私のために働いた: <事前> <コード> private void MainForm_MdiChil...

14  SVNマージマージされた追加のもの  ( Svn merge merged extra stuff ) 
私はただ何かを使ってマージをしました: <事前> <コード> svn merge -r 67212:67213 https://my.svn.repository/trunk . 私は2つのファイルしかありませんでした、そのうちの1つは単純な<​​code...

0  Subversion Pre-1.5スタイルのマージを正確にする方法?  ( How exactly to do a subversion pre 1 5 style merge ) 
私は現時点でSubversion 1.4マージを扱っていて、これを見つけて、これを見つけた wents の質問に私の問題を正確に説明します。実際の質問は、 git スタイルのリベースと、ツリーの競合を生成するSVNに問題を扱います。次の推奨事項が含まれています...

3  2つのキューを1つのキューにマージする方法  ( How do i merge two queues into one queue ) 
操作をサポートする2つのキューを与えられ、デキュー/ pop_front、およびsize <事前> <コード> Q1: A1 A2 A3 Q2: B1 B2 B3 どのようにして、3番目のキュー(同じ操作もサポートしています)を取得します。 <事前> <...

0  マージレプリケーション - トラッキングレベルの変更  ( Merge replication changes tracking level ) 
次の問題を抱えています - テーブルAから選択した列のみを複製しています。このテーブルのレコードを更新するパブリッシャでは、パブリッシャで実行されるさまざまな更新があります。テーブルAに複製されていない列のみに影響を与える更新が実行されています。私の場合は不要...

8  複数のネイティブDLLを1つのDLLにマージします  ( Merge several native dlls into one dll ) 
私は1つの大きな(ER)DLL(ここに提案された)。私はプロジェクトをマージすることによってそうすることができますが、それほど邪魔にならない方法を望みます。 複数のDLLを1つの単位にマージすることができますか? クイック検索が見つかりましたこのスレッドこ...

43  異なる値を保持して、文字列配列を効率的にマージします。  ( Efficiently merge string arrays in net keeping distinct values ) 
.NET 3.5を使用しています。私は1つ以上の値を共有するかもしれない2つの文字列配列を持っています: <事前> <コード> string[] list1 = new string[] { "apple", "orange", "banana" }; st...

7  SVNログ内で検索する方法  ( How do i search within svn logs ) 
SVNのコミットログ内で検索できるようにしたいです。私はあなたが亀のそれをすることができることを知っていますが、コマンドラインを使っている方法を見つけることができませんでした。 我々は2層リポジトリアプローチに移行しているので、安定したブランチは完全に完全...

16  故障したGit Merge Commitをどのように元に戻すのですか  ( How do you revert a faulty git merge commit ) 
だから私の同僚の一人のうちの1人は誤って木の片側だけを維持するマージをしました。だから彼はマージを始めました、マージによって導入されたすべての変更を削除してから、マージをコミットしました。 これは私がテストレポにした簡単なテストケースです。このレポには3つの枝...




© 2022 cndgn.com All Rights Reserved. Q&Aハウス 全著作権所有