少なくとも、新しいリポジトリに孤立したブランチを作成することができます。 (git checkout --orphan
)、ダミーコミットを1回行います。
それとも単にZ
からnewbranchを作成する(まだあなたの新しいレポで)
これは、あなたの古いレポをローカルにクローン化されていることを前提としています。
また、新しいリポジトリもローカルに作成しています。
cd c:\a\path
git init create newrepo
cd newrepo.
まず、古いレポがBでチェックアウトされていることを確認します(つまり、あなたのブランチの前にコミット表すSHA1)
cd C:\path\to\old\repo
git checkout B
は、その後、あなたの新しい空のレポにそのコンテンツをインポート
cd C:\a\path\newrepo
git --work-tree=C:\path\to\old\repo add .
git commit -m "Import old repo as Z"
新しいリポジトリで古いリポジトリを取得し、その新しいブランチでコミットを再配布することができます。
cd C:\a\path\newrepo
git remote add oldrepo C:\path\to\old\repo
git fetch oldrepo
git checkout -b newbranch
git rebase --onto newbranch C~ oldrepo/newbranch
これは、新しいリポジトリに必要なコミットだけを再作成します。
しかし、リベースは問題があり、多くの場合、merge conflicts to be resolved manuallyとなる可能性があります。あなたのケースでは
in this example見られるように、あなたは、git replace
か、git graft pointsあなたの場合に完全にそれを避けることができます。
git fetch oldrepo
git checkout -b newbranch oldrepo/newbranch
echo SHA1(C) SHA1(Z) > .git/info/grafts
(コミットxxx
のSHA1によるSHA1(xxx)
を交換してください:
はその後git fetch oldrepo
ステップ、までの過去の指示に従ってください。Z
は、親が(何のマージ/リベースがここで必要ありません)C
のコミットとしてZ
を宣言します。つまり、新しいレポで行わコミット新しいC
は、まず古いレポであなたのnewbranch
のコミットされている)
ています。
は、それが永続的なものにするには、git filter-branch
を使用します。
git filter-branch --tag-name-filter cat -- newbranch
rm .git/info/grafts
あなたは、新しいリベース後のブランチことをプッシュすることができます。
git remote add origin /url/of/new/remote/repo
git push -u origin master
git push -u origin newbranch
この新しいリポジトリについて詳しく説明できますか?最初から作成していますか、それは現在のレポにどのように関係していますか?スクワッシュはここで働くかもしれない。 –
私は自分の枝を作った大きなレポを持っています。今私は他の人にしたことを示したいと思う。私は彼らに何か他のものを見せたくありません。だから、私は自分の店をbitbucketで作り、自分の支店(正確に何をしたのか)だけを押し出して、particilaryの人々がそれを見ることを許可したいのです。 – vladimir
@vladimir新しいリポジトリをリセットしてやり直すことができる場合は、リベースの代替案(多くのマージの競合があった)を提案する回答を編集しました。 – VonC