2017-08-25 5 views
0

私はブランチを持っていますが、ブランチのスクリプトの1つである多くのファイルを含む新しいプロジェクトが含まれています。foo.pyfeature/10/ブランチにあるべきではないが、現在はfeature/11/ブランチに入るはずです。終了してから、マスターに戻してください。 foo.pyはmasterのファイルに依存しますが、新しいファイルのいずれとも対話しないか、またはfeature/10/の新しいファイルに依存しません。一連のコミットのうち1つのファイルを独自のブランチに引き出し、gitの履歴を保存します。

この新しいブランチを作成するには、foo.pyにコピーしてください。他に何も保存せずにfoo.pyのgitの履歴を保存しますか?

私は明らかに新しいブランチを作成し、手動でファイルを貼り付けてコピーすることができますが、これは改訂履歴からfoo.pyの将来の開発を中止するのでgitの精神に反しているように感じます。

答えて

0

(あなたが実際には、それらの中にバックスラッシュを使って枝に名前を付けていなかったあなたは?私はスラッシュを前提とするつもりでした。)

git filter-branchはこれを行うことができます。

git filter-branch $(git merge-base feature/10 feature/11)..feature/11 \ 
    --index-filter ' 
     BASE=$(git merge-base feature/10 feature/11) 
     # Save the current state of foo.py 
     FOO=$(git ls-files --stage -- foo.py) 
     read -r mode object stage file <<<${FOO} 
     # Set the entire tree back to the base state 
     git read-tree ${BASE}^{tree} 
     # Add the current foo.py to the tree 
     git update-index --cacheinfo "${mode},${object},foo.py" 
    ' \ 
    --prune-empty 

これは、feature/11ブランチを書き換えます。書き換え前のバージョンはoriginal/feature/11です。

関連する問題