1

ブランチを取り戻しdevたいのですが、残したくないものでいっぱいです。そこにある履歴を削除せずに、現在の状態を停止して、代わりにステージングに基づくようにすることはできますか?次のように設定したいと思います。

staging __________________________________
dev     _________  \______/    \____/
4

3 に答える 3

1

「ステージングに基づく」および「履歴を削除しない」の意味によって異なります。

devマージして一緒に行動したいstagingが、実際には現在ステージングされているものとまったく同じ結果が得られるという意味であれば、それは簡単です。リポジトリのルートディレクトリから:

git checkout origin/dev -b dev
git merge --no-commit origin/staging
git checkout --theirs .
git commit -m "Revert back to the contents of staging"
git push origin dev

ここでのキーラインは3番目です。origin/stagingこれは、マージの結果をブランチの正確な内容で上書きするものです。

于 2012-06-12T08:06:17.087 に答える
0

ブランチはコミットへの参照にすぎません。ブランチを削除したいdev場合は、ローカルリポジトリで

$ git branch -D dev
$ git branch dev staging

最初のコマンドはブランチ「dev」を削除し、2番目のコマンドはブランチ「dev」を再度作成して「staging」からフォークし、「dev」ブランチが「staging」と同じコミットを指すようにします。

リモートリポジトリと同期する場合は、新しい「dev」ブランチを強制的にプッシュする必要があります。

$ git push --force origin dev

「dev」に含まれる履歴を今でも保持する必要がある場合は、削除する代わりに名前を変更してください。

$ git branch -m dev ex-dev

新しい「開発者」を強制的にプッシュすることについてのポイントは、この場合でも明らかに当てはまります。

リモートリポジトリ内のブランチの強制的な置き換えは、そのような置き換えの前にリポジトリのクローンを作成し、現在置き換えられているブランチの元のコンテンツに基づいてローカルブランチを作成した人に大きな影響を与えることに注意してください。これは、文献で広く取り上げられています。git-rebaseたとえば、マニュアルを参照してください。

于 2012-06-12T11:59:23.923 に答える
0

あなたの質問は、「保持したくないもの」と書かれているのに、「履歴を削除せずに」と書かれているという点で少し混乱しています。注意を怠るには、次のことをお勧めします。

git checkout staging #switch away from dev branch
git branch -m dev olddev #rename old dev branch so we don't delete history
git checkout -b dev staging # start a new dev branch where staging is currently

別のポイントで新しいブランチを開始する場合は、最後のコマンドでdev適切なSHA1またはブランチ名に置き換えてください。親のいない完全に新しいブランチにstagingなりたい場合は、へのオプションが必要になります。dev--orphangit checkout

devそれが済んだら、新しいものをアップストリームリポジトリにプッシュすることについてのkostixノートを参照してください。

于 2012-06-12T14:16:29.443 に答える