2017-07-13 12 views
0

私は新しい非裸のgit repo(git init)を持っています。私は初期の それに実験に 彼も行わコミットを実行する(gitのは、-a -m「コミット初期の」コミット)GIT - マスターブランチからコンテンツをコピーする側のブランチ(非裸)

今、誰かが新しいブランチを作成します(branchEx)コミットん

はその後、彼が使用してそれをプッシュ(gitのプッシュ-u起源branchEx)

しかし、チームの誰かが実験を継続するにはmasterブランチ

上の重要な変更をコミットし、我々はbranchExコピーにマスターブランチの正確内容を作成し、我々の実験を再起動する必要があります。

branchExのコミットされた変更については気にしません。 branchExがマスターブランチを正確にコピーしたいだけです。

答えて

1

ですから、

A -- B <--(master) 
\ 
    X -- Y -- Z <--(branchEx) 

を持って、私がお勧めすることはbranchEx REFを移動することです。たとえば今

git checkout master 
git branch -f branchEx 

あなたの地元のレポでは、それはちょうどbranchExが新たmasterで作成されたかのようです。

A -- B <--(master)(branchEx) 

(技術的にはYXコミットし、Zはまだ存在しているが、彼らはおそらく、今どの参照から到達可能ではないですし、最終的にガベージコレクトかもしれません。)

これはあなたが持っていることを意味し力のプッシュを行うには、通常は何か私は避けるだろう;このケースで私がそれをする理由は、それは一度の費用です。私はそれを避ける方法を考え出すことができますが、もっと複雑になるだけでなく、迷惑な手続きを完了するだけで "逃げない"コストがあります。

ので:

git checkout branchEx 
git push -f 

今私が話していたその1つの時間コスト:origin/branchExレフリーが含まれている可能性のあるクローンの観点から、このrefは予期しない方法で移動しています。そのようなクローンがorigin/branchExを上流(通常はbranchExという名前のローカルブランチ)として扱う(ローカル)ブランチを持つ場合、この予期せぬ移動と同期する必要があります。これを行う1つの方法は、

git checkout branchEx 
git pull -f 

です。このため、強制的にプッシュすることを検討するときはいつでもチームと調整することが重要です。

0

git rebaseを使用してください。ブランチを更新し、ブランチの上にローカルコミットを適用しようとします。

例:

git checkout branchEx 
git rebase master 

あなたがそれらを解決する必要がある競合があるかもしれません。競合がなければ、完了です。

すべてのローカルコミットを破棄したい場合は、git reset --hardを実行する必要があります。例:あなたがbranchExにすでにコミットを気にしないので

git checkout branchEx 
git reset --hard master 
+0

しかし、私はbranchExに対して行ったすべてのコミットを破棄したい – anaval

関連する問題