プルオリジンsome_branchを実行していますが、多くの変更があることがわかります。最終的に、彼らが私のすべてを消してもかまいません。
代わりに、またはmergetoolを使用してファイルを1つずつマージするには、どうすればそれらをすべて受け入れることができますか?
ただ:
git clone $url
真剣に!それが最善の方法です。
あらゆる種類のコマンドを実行して参照を移動できますgit reset
がgit branch
、唯一の目的は、将来の参照のためにコミットをローカルリポジトリのどこかに保持することです。それが目標である場合は、リポジトリ全体をそのままにして、オリジンを再クローンします。
1つのブランチですべての変更を受け入れるには、foo
:
git checkout foo
git fetch origin +refs/heads/foo:refs/remotes/origin/foo
git reset refs/remotes/origin/foo
foo
と同じコミットを指すようfoo
になりorigin
ます。作業ディレクトリ内のファイルを吹き飛ばしたい場合は、に追加--hard
してくださいgit reset
。最初にマージする場合は、に置き換えfetch
ますpull
。
ローカルリポジトリにたくさんのぶら下がっているコミットがあるかもしれません。gitはいつかクリーンアップするかもしれませんが、しばらくの間はreflogを介してそれらにアクセスできます。
または:
git status | grep "both " | cut -f2 | cut -f11 -d" " | xargs git checkout --theirs
git status | grep "both " | cut -f2 | cut -f11 -d" " | xargs git add
これにより、競合するすべてのリモートファイルを強制的に受け入れるようになります。
これが私が使用したアプローチですが、問題ないようです。リモートのすべての新しいバージョンを含む「theirs」というブランチがあります。「ours」という名前のバージョンは、彼らの昔のバージョンに基づいた私の作品です。これは、あまりにも多くの無関係な変更がありますが、残しておきたい多くの追加(サイトの新しいサブディレクトリ/すべて)です。
git checkout ours
git checkout theirs -- *.php *.txt *.config modules themes includes scripts
git commit -m "New version with all new key files from 'theirs'"
2回目のチェックアウトでファイルとディレクトリのリストが正しい限り、これで問題ありません。
履歴を「彼らの」ブランチに基づいて作成したい場合は、逆にこれを実行することをお勧めします。