2017-12-28 11 views
1

私はmasterブランチを持っているとします。新しいブランチが作成されました。今私は、このブランチが作成される前にコミットされたコメントなしで、このブランチを新しいリポジトリに移動したいと思います。ルートのないブランチを新しいリポジトリにプッシュする

画像: 1.旧リポジトリ

newbranch C - D - E 
      /
master A - B 

画像:2.新しいリポジトリ

newbranch  C - D - E 
      /
master  Z 

私はnewbranchを移動する必要はありませんが、私はそれを試してみましたが、それは以前のすべての歴史を取りました。 私もコミットを削除するのに役立つリベースに精通しています。 しかし、私の新しいレポでは見たくない1000件以上のコミットがあります。リベースモードで手動で削除することはできません。

私はこの新店舗のみを表示する必要があります。このブランチで作成されたものですが、以前のものはコミットしません。

返信いただきありがとうございます!

+0

この新しいリポジトリについて詳しく説明できますか?最初から作成していますか、それは現在のレポにどのように関係していますか?スクワッシュはここで働くかもしれない。 –

+0

私は自分の枝を作った大きなレポを持っています。今私は他の人にしたことを示したいと思う。私は彼らに何か他のものを見せたくありません。だから、私は自分の店をbitbucketで作り、自分の支店(正確に何をしたのか)だけを押し出して、particilaryの人々がそれを見ることを許可したいのです。 – vladimir

+0

@vladimir新しいリポジトリをリセットしてやり直すことができる場合は、リベースの代替案(多くのマージの競合があった)を提案する回答を編集しました。 – VonC

答えて

0

少なくとも、新しいリポジトリに孤立したブランチを作成することができます。 (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 
関連する問題