3

私のマスター GIT ブランチにはいくつかのエラーが含まれているため、マスター ブランチが dev のコピーになるように、マスター ブランチに dev ブランチを再チェック、再マージ、または場合によっては複製したいと考えています。

どうやってやるの?どうも。

4

3 に答える 3

6

チェックアウトしたファイルがブランチと一致しないという単純な問題の場合は、git reset通常どおりに使用してください。

git reset --hard HEAD

それだけで十分です。ただし、マスターを dev で上書きしたい場合は、読み進めてください。


master ブランチを dev ブランチの内容で上書きする場合は、次のgit resetように使用します。

$ git checkout master
$ git reset --hard dev

そして、これを別の場所にプッシュしたい場合:

$ git push origin master

dev ブランチが master ブランチから早送りされない場合 (master ブランチにはめちゃくちゃなものがあるとあなたが言ったので、そうはならないと思います)、追加する必要があることに注意してください。--forceプッシュにフラグを立てて、リモートで上書きします。

$ git push origin master --force

ただし、これには履歴の書き換えに関する通常の警告がすべて含まれる可能性があることに注意してください。git rebase他の誰かがこのリモートを使用する場合、上流のリベースと同等の処理を行う必要があります。


将来この問題を回避するには、使用する必要--forceはほとんどないことを友人に伝えてください。しようとしたときに競合が発生する場合はgit pushgit pull最初に競合を解決してから、git push.

于 2010-12-21T00:59:51.757 に答える
1

あなたのコメントから、次の 3 つのケースが考えられるようです。

  1. マスター インデックスには正しいコードが含まれており、作業コピーは壊れています。
  2. 作業コピーは問題なく、インデックスは壊れています。
  3. どちらも壊れています。

まず、すべてをバックアップします。それで:

ケース 1 ではgit reset --hard HEAD、壊れた作業コピーを破棄するために使用します。

ケース 2 では、作業コピーにすべてを追加してコミットします。

ケース 3 ではgit reset --hard dev、インデックスと作業コピーの両方を破棄するために使用します。あるいは、git reset --hard SOME_COMMIT_ID_THAT_ISN'T_BROKEN

--force3 つのケースすべてで、自分が何をしているのかを本当に理解していない限り、絶対に使用しないように友人に伝えてください。

また、裸でないリポジトリ (つまり、作業コピーのあるリポジトリ) にはプッシュしない方がよいでしょう。作業コピーのあるリポジトリに直接プッシュするのではなく、プッシュとプルの両方を行うベア リポジトリをどこかにセットアップすることをお勧めします。git init --bare裸のレポを作成するために使用します。

私はすべてをバックアップすることに言及しましたか?良い。やれ。

于 2010-12-21T01:05:04.257 に答える
0

良い質問。私は自分自身の前にこれをやりたいと思っていましたが、やったことはありません。私の最善の推測は、以下を試すことです。: 私は自分でやったことがないので、これがうまくいくかどうかはわかりません。

git checkout master

git pull origin dev

git commit -a -m "reverted to dev"

上記の方法で行うと、競合が発生する可能性があります。

于 2010-12-21T00:44:21.007 に答える