2011-11-17 21 views
9

私はgit repoを3つに分けています。私はDetach (move) subdirectory into separate Git repositoryを使ってフォルダを分けて、新しいgit reposに正常にプッシュしました。 既存のリポジトリでは、次のコマンドを使用して移動したディレクトリをクリアしました。git push git filter-branchが拒否されました

git filter-branch -f --index-filter "git rm -q -r -f --cached --ignore-unmatch lib/xxx/$REPO" --prune-empty HEAD 

は今、私は、元のレポでgit stを行うときに、私が手に:私はgit pushにしようとすると

# On branch 1.5.0 
nothing to commit (working directory clean) 

、私が取得:

! [rejected]  1.5.0 -> 1.5.0 (non-fast-forward) 
error: failed to push some refs to '[email protected]:/xxx/.git' 
To prevent you from losing history, non-fast-forward updates were rejected 
Merge the remote changes (e.g. 'git pull') before pushing again. See the 
'Note about fast-forwards' section of 'git push --help' for details. 

私の推測では、使用することです-f :git push -f origin <branch> これが私の既存のレポを変更するので、私は確信しています。

答えて

8

フィルタブランチを使用すると、リモートとリポジトリが異なることがあります。あなたが観察するように、リモートはあなたのプッシュをこのことについての警告とともに拒否します。この場合、フィルタリングされたバージョンに合わせてリポジトリを強制的に変更し、forceフラグを押して進めることを計画しています。このような公開されたリポジトリは変更しないでください。ただし、必要に応じて変更することもできます。クローンを持っている人は誰にでも通知する必要がありますが、他に何かがない場合は、先に進んでください。

本当に注意したい場合は、今すぐ元の別のクローンを作成してください。それからプッシュしてください。何かが間違ってしまうと、バックアップのリポジトリからpush --mirrorを使っていつでも強制的に元に戻すことができます。

関連する問題