gitを使用して共有フォークリポジトリを更新する

user1382278

リポジトリAを検討してください。Gerritを介して管理されるgithubリポジトリです。リポジトリAのクローンを作成し、リポジトリAのマスターブランチから新しいブランチを作成しました。この新しいブランチを新しいgitlabリポジトリBにプッシュしました。私はリポジトリBの管理者であり、他の開発者と共有しました。開発者はこのブランチをプッシュできませんが、プルリクエストをマージすることはできます。リポジトリBのマスターブランチでいくつかのプルリクエストをマージしました。したがって、リポジトリBには、リポジトリAの初期コミットとプルリクエストの新しいコミットがあります。BはAのコミット(ba)の上にコミットします。

次に、リポジトリAの新しいコミットでリポジトリBを更新します。これらのコミットをa +と呼びます

2つのオプションがあります。

  1. AをBにマージすると、結果はa + baになります。
  2. BをA +にリベースすると、結果は次のようになります。ba + a。

オプション1:開発コミットは外部コミットと混合されます。デバッグと違いの強調表示が難しい。

オプション2:リモートBで変更を強制的にプッシュする必要があります。私が間違っていない場合、結果は次のようになります。1。開発者がBをプルし、Bのローカルマスターにコミットした場合、ローカルの変更は失われます。 ; 2.開発者は、ブランチBの強制更新後、ローカルブランチのリベース中に大きな問題に直面する可能性があります。

問題を回避するにはどうすればよいですか?

ポーク

私が正しく理解していれば、次のような単一の(ローカル)リポジトリがあります。

            A/master
* -- * -- * -- a
                \
                 * -- * -- b
                       B/mybranch

さて、A更新されたので、次のようになります。

                          A/master
* -- * -- * -- a -- * -- * -- a+
                \
                 * -- * -- b
                       B/mybranch

ここで、直線上にない2つの分岐した分岐があることに注意してください。ですから、a+ b aマージAしたときに得られると言うのBは正しくありません。あなたはマージを取得しますが、それは履歴をそのまま保持します:

                          A/master
* -- * -- * -- a -- * -- * -- a+
                \               \
                 * -- * -- b --- M
                            B/mybranch

あなたが見ることができるように、あなたはまだコミットがどこから来た情報があります間のものをaし、a+一方のブランチから来た、と他のものの間aおよびb他から来ました。そしてM、それらのトロブランチを組み合わせます。通常、これはまさにこれを解決するための適切な方法です。

リベースに対するこれの利点は、あなたが気付いたように、コミットが現状のままであるということです。いずれかのリポジトリを操作したすべてのユーザーは、問題なくそれらの変更を取り込むことができます。これらのコミットのいずれかをリベースした場合、手動で修正する必要があります(おそらく、それを認識していないため、コミットが重複していると、プルして実際にはさらに厄介な履歴が作成されます)。

したがって、ここでマージを行う方が間違いなく優れています。はい、履歴は直線ほど完璧には見えませんが、何が起こったかを適切に伝えますA独立した分岐した開発ラインがあり、アップストリームリポジトリからの変更で更新されていますこの情報は役立つ可能性があるため、それらを保持することは理にかなっています。特に、ユーザーが両方のリモートと対話している場合、ユーザーはリポジトリを両方のリモートと互換性を保つことを確実に好みます。

履歴をこのように見せたくない場合、およびとの互換性を気にしないA場合は、すべての変更をからA押しつぶすこともできますB

                          A/master
* -- * -- * -- a -- * -- * -- a+
                \
                 * -- * -- b -- [A]
                            B/mybranch

ここでは、[A]間のすべての変更が含まれているコミット潰れるaa+、単一ではコミット。あなたはリベースすることによって、この結果を得ることができるA上にB、すべてのコミットを押しつぶしながら。この場合、これらの変更がどこから来たのかをコミットメッセージに明確に記載する必要があります。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

Mac OSXからWindows共有フォルダーでホストされているgitリポジトリのクローンを作成します

分類Dev

アクセスリンクを介してプライベートgitリポジトリを共有する

分類Dev

git-tfsを使用して2つのTFSVCリポジトリ間でコードを共有する

分類Dev

1つのファイルを複数のgitリポジトリで共有して、複数のユーザーが更新できるようにします

分類Dev

AndroidEclipseで共有クロスウォークプラットフォームを使用しながらリリースキーをエクスポートする

分類Dev

gitリポジトリを複製する方法は?(フォークなし)

分類Dev

フォークされたgitリポジトリを更新/維持するためのワークフロー

分類Dev

ネットワーク共有のリポジトリでgitフックを実行すると、どのバイナリが使用されますか?

分類Dev

gitリポジトリを2つの異なるコードベースとして2つの別々のリポジトリにフォークする

分類Dev

Azure DevOps:RESTAPIリポジトリを使用してGITリポジトリにフォルダーを作成する方法

分類Dev

共有 git リポジトリで node_modules を更新する適切な方法

分類Dev

あるGitリポジトリから別のGitリポジトリにフォルダを共有するにはどうすればよいですか?

分類Dev

SourceTreeを使用してフォークされたリポジトリを更新するにはどうすればよいですか?

分類Dev

Gitリポジトリを通常のフォルダーとして別のレポートに移動する

分類Dev

ユーザーごとのアクセスを管理するためにsshキーを使用して、root権限なしで共有リモートgitリポジトリをセットアップする(解決済み)?

分類Dev

bower_componentsフォルダーを使用してGitリポジトリーを構築しますか?

分類Dev

WindowsフォームアプリでFacebookGraphAPIを使用して投稿を共有またはリンクする

分類Dev

共有サーバーからgitリポジトリをプルしてプッシュバックするにはどうすればよいですか?

分類Dev

共有リンクを使用して、ファイルをクラウドストレージフォルダーにアップロードします

分類Dev

gradleを使用して同じリポジトリ内の共通モジュールを共有する2つのAndroidプロジェクト

分類Dev

crontabを使用してgitリポジトリを自動的に更新する

分類Dev

@patchを使用して、JPAリポジトリを使用して単一のフィールドを更新する方法

分類Dev

Gitを使用してリポジトリを別のリポジトリにインポートする方法

分類Dev

herokuでフォークされたgithubリポジトリを更新する方法

分類Dev

既存のgitリポジトリを変更して、リモートリポジトリと履歴を共有します

分類Dev

GitHubからGitLabにGitリポジトリをフォークする

分類Dev

Gitリポジトリフォルダーを変更する

分類Dev

新しいフォルダーを git リポジトリにリンクする方法

分類Dev

git を使用して、リポジトリ内の特定のファイルをディレクトリに取得/更新する

Related 関連記事

  1. 1

    Mac OSXからWindows共有フォルダーでホストされているgitリポジトリのクローンを作成します

  2. 2

    アクセスリンクを介してプライベートgitリポジトリを共有する

  3. 3

    git-tfsを使用して2つのTFSVCリポジトリ間でコードを共有する

  4. 4

    1つのファイルを複数のgitリポジトリで共有して、複数のユーザーが更新できるようにします

  5. 5

    AndroidEclipseで共有クロスウォークプラットフォームを使用しながらリリースキーをエクスポートする

  6. 6

    gitリポジトリを複製する方法は?(フォークなし)

  7. 7

    フォークされたgitリポジトリを更新/維持するためのワークフロー

  8. 8

    ネットワーク共有のリポジトリでgitフックを実行すると、どのバイナリが使用されますか?

  9. 9

    gitリポジトリを2つの異なるコードベースとして2つの別々のリポジトリにフォークする

  10. 10

    Azure DevOps:RESTAPIリポジトリを使用してGITリポジトリにフォルダーを作成する方法

  11. 11

    共有 git リポジトリで node_modules を更新する適切な方法

  12. 12

    あるGitリポジトリから別のGitリポジトリにフォルダを共有するにはどうすればよいですか?

  13. 13

    SourceTreeを使用してフォークされたリポジトリを更新するにはどうすればよいですか?

  14. 14

    Gitリポジトリを通常のフォルダーとして別のレポートに移動する

  15. 15

    ユーザーごとのアクセスを管理するためにsshキーを使用して、root権限なしで共有リモートgitリポジトリをセットアップする(解決済み)?

  16. 16

    bower_componentsフォルダーを使用してGitリポジトリーを構築しますか?

  17. 17

    WindowsフォームアプリでFacebookGraphAPIを使用して投稿を共有またはリンクする

  18. 18

    共有サーバーからgitリポジトリをプルしてプッシュバックするにはどうすればよいですか?

  19. 19

    共有リンクを使用して、ファイルをクラウドストレージフォルダーにアップロードします

  20. 20

    gradleを使用して同じリポジトリ内の共通モジュールを共有する2つのAndroidプロジェクト

  21. 21

    crontabを使用してgitリポジトリを自動的に更新する

  22. 22

    @patchを使用して、JPAリポジトリを使用して単一のフィールドを更新する方法

  23. 23

    Gitを使用してリポジトリを別のリポジトリにインポートする方法

  24. 24

    herokuでフォークされたgithubリポジトリを更新する方法

  25. 25

    既存のgitリポジトリを変更して、リモートリポジトリと履歴を共有します

  26. 26

    GitHubからGitLabにGitリポジトリをフォークする

  27. 27

    Gitリポジトリフォルダーを変更する

  28. 28

    新しいフォルダーを git リポジトリにリンクする方法

  29. 29

    git を使用して、リポジトリ内の特定のファイルをディレクトリに取得/更新する

ホットタグ

アーカイブ