3

私はGITを初めて使用し、愚かな質問がありますが、これまでのところ、これについて言及している投稿はありません。状況は次のとおりです。

                A                A'
upstream/master-+---+----+----+-----+
                    |
myworkingbranch     +---+---+---
                    A   B   C 

ポイントAでレポジトリをフォークし、次に自分のコミットB、C、...を作成します。同時に、元のレポジトリはコミットA'を作成します。一般に、git rebaseを適用することで、AではなくA'に基づいてB、C、...を作成できます。ただし、コミットBでは、いくつかのファイルが削除され、A'に残ります。その後、git rebaseを実行するたびに、削除/削除されたファイルの競合が発生します。つまり、mergetoolまたはその他の方法で競合を手動で解決する必要があります。

githubのヘルプページから、質問は2つの部分に分かれているようです。

  1. git rebaseによって、コミットB、Cはキャンセルされ、myworkingbranchはキャッシュ内のAに戻ります。この間、Bで削除されたファイルはどうですか?それらは復元されますか?そうすれば問題ないからではないと思います。

  2. 削除されたファイルが復元されない場合、削除されたファイルへの変更を含むアップストリーム/マスターからコミットA'を適用すると、競合が発生します。また、リベースするたびに、競合を手動で解決する必要があります。そのようなファイルは何百もある可能性があるので、それはひどいです。

Qestion: myworking branchisで削除されたファイルへの変更を含むアップストリーム/マスターのコミットが適用されている間、それらの削除されたファイルを参照する変更を自動的に省略できるgit rebaseのエレガントな方法はありますか?私が上で述べた問題の2つの部分の両方で?

.gitattributegit mergeの場合、fileを使用してアップストリームブランチの特定のファイルを省略できることがわかりました。git rebaseで機能しますか?コミットを介してこれらのファイルを追加した場合.gitattribute、たとえばmyworkingbranchでDを追加した場合、git rebaseの場合、ステータスAはDではなくキャッシュにあります。これも.gitattributeファイルを含まず、Aでのパッチ適用中に競合が発生します。 '

助けてくれてありがとう。

4

1 に答える 1

2

をアクティブにして、競合解決を一度git rerere覚えることができます。

その後のリベースは、同じ競合によって停止されることはありません。


この間、で削除されたファイルはBどうですか?それらは復元されますか?そうすれば問題ないからではないと思います。

はい、リベースは新しいベース(A')のチェックアウトから始まります。ファイルはインデックスに復元されます。
そして、それが適用さBCます。

于 2012-11-14T17:44:48.760 に答える