ある時点までのプロジェクトの開発を含む1つのGitリポジトリ(A)がありました。次に、このリポジトリAがオンになっていたUSBスティックを紛失しました。幸いにも、最新のコミットのバックアップがあったので、後で新しいリポジトリ(B)を作成して、最新のプロジェクトの状態をインポートし、開発を続けることができました。失われたUSBスティックを回復したので、2つのGitリポジトリーがあります。
どういうわけか、リポジトリBをリポジトリAにリベースする必要があると思いますが、その方法がわからないので、おそらくフェッチ/プルとリベースを使用しますか?
AとBが同じリポジトリではない(最新の作業コピーを使用してBを作成した)場合は、 graft を使用して、それらに共通の履歴があるように見せかける必要があります。
VonCの答え に従ってAをBのリモートとして追加し、レポが次のようになっているとします。1:
~/B$ git tnylog
* 6506232 (HEAD, master) Latest work on B
* 799d6ae Imported backup from USB stick
~/B$ git tnylog A/master
* 33b5b16 (A/master) Head of A
* 6092517 Initial commit
親がAの頭であることをBのルートに伝える接木を作成します。
echo '799d6aeb41095a8469d0a12167de8b45db02459c 33b5b16dde3af6f5592c2ca6a1a51d2e97357060' \
>> .git/info/grafts
これで、Bの履歴を要求すると、上記の2つの履歴が1つとして表示されます。移植片を永続化するのは簡単ですgit filter-branch
引数なし。ただし、フィルタブランチの後は、どのブランチにもいないので、git branch -D master; git checkout -b master
。
1 git tnylog
= git log --oneline --graph --decorate
AとBが同じリポジトリである場合(最初のSHA1は共通)、次のことができます。
git remote add A /path/to/A
git fetch A
to すべてのリモートAブランチを更新 Bリポジトリでgit checkout dev
(Bで、開発中)git rebase A/devBranch
は、A/devBranch
(失われた開発)の上にB(つまり、バックアップから開発または再開発したもの)を再生します。このような少し SO質問 。最後のステップでは、開発者を失った開発者と同期させることができます。
しかし、実際には、Aからフェッチすると、完了です。Bには、「all」履歴(失われた履歴)が含まれていますそしてあなたの現在の仕事)
まず、レポAの作業用クローンを作成することから始めます。
次に、単純にBからプルしてマージします。新しいブランチを作成してそこにプルし、2つのブランチをマージすることをお勧めします。強制フラグも必要になる場合があります。私はMercurialでこのようなことを行って(明らかに無関係な2つのリポジトリを一緒に移植する)、「-f」が必要です。