2

開発マシンのリポジトリクローンからリポジトリマスターに変更をプルし、「gitfetch」の後に「gitmerge」のようなものを使用してprodマシンのそのリポジトリマスターのコピーを更新することに依存するコードワークフローがあります。

マスターすることをコミットしたという問題が発生しましたが、コードがフリーズしたため、これらの変更が本番マシンに取り込まれることはありませんでした。コードのフリーズから抜け出すには、マスターにもコミットされている単一のファイルを更新する必要があります。

この時点で、本番マシンはすべて、10回のコミットなどでマスターリポジトリの背後にあります。私がprodマシンに引き込みたいのは最新のコミットだけです。「gitfetch&&git merge」は、必要なのが単一のファイルを早送りするだけの場合に、リポジトリ全体を早送りします。

その単一のファイルをチェリーピックするための最良の方法は何ですか?「gitcheckoutfile.ext」を実行すると、更新されたマスターではなく、ローカルリポジトリのコピーから更新されます。他のすべてを更新せずに、ローカルコピーにファイルの最新バージョンを「認識」させたいのですが。

私のアイデアは、「git fetch」を実行してリポジトリを更新してから、「gitcheckoutfile.ext」を実行して1つのファイルだけを更新することでした。それは私がやりたいことをするための最良の方法ですか?そうでない場合、誰かが多くのGitコミットで遅れているマスターから単一の更新されたファイルをチェックアウトする方法について私にアドバイスできますか?

4

3 に答える 3

3

次のようなものを試してください

git fetch
git checkout master -- src/your/file.txt
于 2011-06-08T22:37:01.360 に答える
1

コミットハッシュの後にファイルを参照する必要があります。目的のハッシュを取得するには、実行できます

git log remoteRepo/remotebranch

ローカルリポジトリにマージする単一ファイルのバージョンを含むコミットのハッシュではありません。そして、 git fetch && git mergeを実行する代わりにこのハッシュを取得したら、次を実行する必要があります。

git fetch && git checkout <HASH> <PATH_TO_SINGLE_FILE>

これで、作業ブランチに更新されたファイルがあるはずです。

よろしく、ルネ

于 2011-06-08T23:03:58.863 に答える
0

注:このソリューションでは、git固有のコマンドは使用されません。このすべての作業を行うための単一のgitコマンドがある場合があります。

リビジョン管理外のどこかに、更新された単一ファイルのコピーを作成します。
古いリビジョン(実動マシンが使用されているリビジョン)に移動します。
更新された単一ファイルをリビジョン管理にコピーして戻します。
チェックインすると、新しいブランチが作成されます。
生産機械への新しいブランチをチェックアウトします。

于 2011-06-08T22:31:23.677 に答える