0

私はブランチ A を持っており、それに非常に重要な変更のリストを作成したいと考えています。これらの変更の最終結果は、ディレクトリ B に既に存在します。これも新しい作業コピーにしたいと考えています。要するに、「このディレクトリを自分のブランチの最新の作業コピーにする」だけです。

これを達成するために私が現在認識している2つの可能性があります:

  1. A を一時ディレクトリ C にチェックアウトし、「.git」以外のすべてを削除し、ディレクトリ B の内容を C にコピーしてから、ディレクトリ C から追加/コミット/プッシュします。最後に、C の内容全体を B に戻します。
  2. チェックアウトなしでリポジトリを一時ディレクトリ C にクローンし、「.git」ディレクトリを C から B に移動します。B 内から追加/コミット/プッシュします。

これらのソリューションの両方の問題は、恐ろしく扱いにくいだけでなく、ディレクトリ B と C の両方にディスク容量が必要になることです。オプション 1 では、ファイルのシャッフルがもう少し必要になります。したがって、現在、これに対する私の最善の解決策はオプション 2 です。詳細な手順を以下に示します。

「reset」または「symbolic-ref」を使用してこれを行うより良い方法があると思います。成功せずにさまざまなオプションを試しました。

mkdir /tmp/git_output
cd /tmp/git_output
git init
git remote add origin /path_or_url_to/git/repo.git
git fetch
git checkout name_of_branch
mv .git /path/to/new/src/
cd /path/to/new/src/
git commit -a
git push
rm -rf /tmp/git_output

助けてくれてありがとう。

4

2 に答える 2

1

作業コピーからすべてを削除できるはずだと思います (フォルダーを削除しない.gitように 3 重に確認してください。バックアップを作成してください!)。次に、ディレクトリの内容をコピーしてB( git add -uGit のバージョンに応じて)、不足しているファイルをインデックスから削除し、新しいファイルをインデックスに追加します。専念。幸せになる。


私が考えることができる別の方法は、ディレクトリBで新しい Git リポジトリを初期化し、すべてのファイルをコミットしてから、 A: にプッシュすることですcd B; git init; git add .; git commit -m 'complete rewrite'; git push /path/to/A HEAD:rewrite

ここで、 で接ぎ木を作成し、ブランチの先端が のブランチの先端を親として持つAことを Git に伝えます。次に、その移植片を永続的にするために実行します。rewritemasterAgit filter-branch

于 2014-05-06T14:59:02.573 に答える