2017-03-19 3 views
1

/a/.git/b/.gitという2つのリポジトリがあり、どちらもc.txtというファイルがあります。このファイルは以前と同じですが、c.txtはrepo aに変更されました。この変更をどのようにして抽出して、手動でコピー・ペーストせずにbのrepoに適用できますか? c.txtの変更は、repo aの他の変更と一緒にコミットされましたが、私は具体的なc.txtのパッチのみが必要です。他のgitリポジトリの特定のファイルの変更を自分のリポジトリに適用する方法

P.S.可能であれば、この変更をrepo bにコミットするときに元の著者を保存したいと思います。

答えて

2

あなたはrepoB(/b/.git)に(/a/.gitrepoAからc.txtのバージョンを作るための手順の下に使用することができます。

# In local repoB /b/.git 
git remote add -f a /a/.git 
gitk --all #To find the commit id where remotes/a/master point to (assume the new version of c.txt in master branch) 
git cherry-pick <commit id you find in above step> -X theirs 

今新しいバージョンのc.txt/b/.gitに元の著者を維持しています。

+0

ありがとうございます。これはうまくいくはずですが、コミットしたくない他のファイルの変更も私のrepoBにコミットされます。 'git cherry-pick xxx -n'を使い、ファイルの変更を受け入れるか拒否し、手動でコミットする必要があります。 –

1

repo-bにrepo-a-url(たとえばrepob)を含む新しいリモートを追加する必要があります。次にチェックアウト特定のブランチ(たとえば、マスター)をrepo-bするファイル。 repo-b

移動し、次のコマンドを試してみてください。

$ git remote add repoa <repo-a-url>  # add a new remote repoa = repo-a-url 
$ git fetch repoa      # sync with repoa 

$ git checkout repoa/master c.txt  # checkout the file to 'repoa' 'master' branch 

$ git log --numstat --oneline c.txt  # show the change lists of c.txt file 
+0

ありがとうございました。これも動作するはずですが、ファイルの他の部分を変更すると動作しません(それは私のせいではありません)。チェリーピックはこれよりもうまくいくはずです。 –

関連する問題