2016-05-10 32 views
0

私はこの問題を適切に言い表せませんでした。だから私がかなり検索している間に、私が何を求めているのか本当に分かっていないと思います。コミット履歴がファイル履歴と同期していませんか?

私たちのチームはGitには新しく、私たちはわからない動作に遭遇しました。私たちはまったく新しいプロジェクトを開始しています。今はMasterブランチを持っています。

シナリオA:

私は、リポジトリを開始し、それに複数の変更を行ってきました。私の同僚がプロジェクトに加わり、リポジトリをクローンしました。彼は別のエリアで作業を始め、数日間はこれらの変更と同期しませんでした。

彼が変更をプッシュする時間が来たとき、彼は変更を行い、プルを開始しました。これは、予想どおり、私の変更のすべてを取り除きました。彼はこれらの変更を自分のローカルリポジトリにコミットし、変更をプッシュしました(意味があります)。

私たちがGitHubで見たコミットは、彼の変更とすべての変更(?)を過去数日間にわたって含んでおり、彼が変更したものを選ぶのを非常に困難にしています。それでも、ファイルの履歴を確認すると、これの履歴はまったく含まれていません。彼らは私が最後に変更を押したときを反映しています。

シナリオB:上記のように

大部分は同じですが、偶然彼のコミットとプルの手順の後に入ってくるの変更を無視し、別の(新しい)同僚。これは幸運にも悲惨なものではありませんでした。コミットの履歴はこれを示していましたが、ファイルの履歴は表示されませんでした。私のファイルは、ファイルの履歴に何も表示されずに本質的に「ロールバック」されていましたが、これは非常に恐ろしいようです。

私はdevブランチを使用していて、すべてのブランチをそれから分岐してdevに戻してから、おそらくすべてが完了して完了したらマスターに合併するべきであるという読書をしてきました。しかし私は、上記のシナリオで何が起きたのかを根本的に理解していないと思います。

編集:私は、私が概念的に考えると、 'pull --rebase'がやろうとしていることを想像することができます。

編集2:そうでない可能性があります。ここに私が意味するものがあります。私の同僚と私はちょうど別の 'testfile2'を作成して、別のコンテンツで 'testfile'を作成することでこれを試しました。変更を受け入れると、新しいファイルとマージの競合が1つ(期待通り)あった。 1つの競合を解決し、新しいファイルとマージしたファイルの両方を自分のローカルリポジトリにコミットしました。それから私はリモコンに押し戻した。なぜ私はコミットしていないときに 'testfile2'を追加したことを示していますが、それはすでに存在していますか?

Screenshot of commit here

+0

コミットなどを表示するツールはどれですか? –

+0

@VenkatNaiduちょうどGitHubを使用しています。レポのコミット履歴はちょうど本当に奇妙なようです。私たちは彼が追加したファイルのカップルを表示することを期待していました。代わりに、彼のすべてのファイルと彼が引き出したすべての変更をコミットするだけです。 私たちが何か間違っているのか、これが予想されるのか分かりません。いずれにしても、それは本当に難しいです。このような初心者のようなシナリオのように思えますが、それがどうしてこのように振る舞うかはわかりません。 – lucasv

+0

リポジトリのgithubリンクを提供できますか?それ以外の場合は実現可能なソリューションを提案するのはかなり難しいでしょう。 – ckruczek

答えて

1

あなただけのprodブランチを使用するためのいくつかの基本原則を定める必要があります。あなたが言ったように、理想的には、毎日の開発(マスター)のための別の支店を持つ必要があります。各開発者は、機能作業のためにマスターから分岐してから、変更をマージしてプッシュする必要があります。上記のシナリオで何が起こったのかについては

  • シナリオ1:

あなたの同僚は、彼がそれを他の方法で回避を行う必要があり、彼の変更をコミットしてから引くべきではありません。これは、機能ブランチが便利な場所です。これを行う1つの良い方法は次のとおりです。マスターから

  1. プルは、最新の新機能ブランチを切っ
  2. 支店を変更し、そこにすべての作業を行う
  3. マスター
  4. チェックアウト
  5. 最新の変更を引い
  6. マスターの
  7. ながら、遠隔
に機能ブランチのマージ(s)がコミット
  • プッシュをマージ

    チームごとにgitライフサイクルを管理する独自の方法がありますが、一般的に、すべての人が従うようなルールを設定することをお勧めします。

    • シナリオ2:

    私はあなたが、彼は強制的にプッシュ意味 "無視入ってくるの変更" で想定しています。これは非常に危険で、可能であればリモートサーバーによって無効にする必要があります。これにより、あなたの履歴を効果的に書き換えることができ、同僚がリモートレポでまだ持っていなかった変更を取り除くことができます。サーバー上で強制的にプッシュまたはパーミッションを無効にすることができない場合は、フェッチ/プル/マージ/プッシュサイクルを行い、誰もが使用できるようにするスクリプトを作成します。

  • +0

    素晴らしいアドバイスありがとうございました:)。私はこれが一般的に良い答えだと思っていますが、歴史がなぜ上の場合のように現れるのかを見ることに興味があります。私が話していることを示す画像で2番目の編集を追加しました。これは、あなたが期待するものと一貫して見えるのでしょうか? – lucasv

    +0

    期待したことを説明できますか? diffの右側に最初の行( "hello Jon ...")が存在する理由について話しているのであれば、それは古いファイルの行末にファイル文字の終わりがあったからですその行の最後に改行文字があるので、行が変更されました。 – yelsayed

    +0

    私はtestfile2を作成しませんでした。それでもコミットは私がしたことを示唆しています。 – lucasv