web-dev-qa-db-ja.com

マージではなく上書きするようにgitpullに指示できますか?

私の知る限り、git pull someRemote masterリモートブランチを私のものにマージしようとします。

Git pullを使用して、「自分のものを完全に破棄し、リモートの別のクローンを作成する」と言う方法はありますか?自分のリポジトリとその履歴を保持したいのですが、そのコマンドの後にsomeRemoteのマスターブランチの1:1コピーを作成したいと思います。

明確にするために、RMとMYの2つのリポジトリがあると想像してください。数値はコミットであり、これは1つのブランチ(マスター)のみを想定しています。

 RM1 --- RM2 --- RM3 --- RM4 --- RM5 --- RM6 ... 
 | | 
 +-> MY1 --- MY2 --- MY3-+-> MY4 --- MY5 --- MY6 ... 

そこで、RM1のクローンとして自分のリポジトリを開始します。それから私は幸せに成長し、RMは幸せに成長しますが、私たちは自分の仕事を共有することはありません。 MY3の後、私のブランチはそれほど素晴らしいものではないが、RM4はかなり良いことに気づきました。だから私はgit pullRM4をMYに。ただし、MY1-3での変更を保持したくないので、MY4をRM4の1:1コピーにします。

ただし、履歴を保持したいので、理想的にはMY3とRM4の間、またはMY3とRM2-4の間で変更を設定したいと思います。

それはまだ私のリポジトリのままであるはずです。

それは可能ですか?

(これは、プロジェクトをフォークし、少し実験し、数週間そのままにしてから、変更を保持せずに更新したいGitHubプロジェクト用です。現時点では、フォークを削除して再度フォークします。 t最良のアプローチ。)

27
Michael Stum

まず、マスターブランチの名前を別の名前に変更します。

git branch -m master my_old_master

次に、新しいマスターを作成します。

git checkout -b master someRemote

Gitのブランチ名の優れている点は、実際の場所ではなく、場所へのポインターにすぎないことです(「場所」はSHA1コミットIDです)。

33
Greg Hewgill

パスへのローカル変更を破棄するgitcheckoutの後のように聞こえます。

チェックアウトを使用して変更を元に戻すことができます。

git checkout myfile.h

インデックスからmyfile.hを復元します

http://git-scm.com/docs/git-checkout

4

現在のマスターブランチを保持したいが、新しいバージョン(リモートブランチをミラーリング)を登録したい場合は、次のことができます。

  • マージフィルタードライバーを登録します(このマージの場合: a keepTheir one
  • git pull --no-commit
  • 削除する必要のある余分なファイル(リモートブランチに存在しなかったマスター内のファイル)がないかどうかを確認します
  • コミット
2
VonC