web-dev-qa-db-ja.com

強制更新後のGitプル

私はgit rebaseでいくつかのコミットをつぶし、git Push --forceを実行しました(これは悪いことです、私は知っています)。

現在、他のソフトウェアエンジニアの歴史は異なり、git pullを実行すると、Gitはマージされます。 rm my-repo; git clone [email protected]:my-repo.gitを実行する以外に、これを修正する方法はありますか?

git Push --forceの反対のようなものが必要ですが、git pull --forceは意図した結果を与えませんでした。

264
iblue

新しいコミットを受け取るには

git fetch

リセット

git resetを使用して、ローカルブランチのコミットをリセットできます。

ローカルブランチのコミットを変更するには:

git reset Origin/master --hard

ただし、ドキュメントに記載されているように注意してください

インデックスと作業ツリーをリセットします。 <commit>以降の作業ツリー内の追跡ファイルへの変更は破棄されます。

ローカルで取得した変更を実際に保持する場合は、代わりに--softリセットを実行します。これにより、ブランチのコミット履歴が更新されますが、作業ディレクトリ内のファイルは変更されません(その後コミットできます)。

リベース

git rebaseを使用して、他のコミット/ブランチの上にローカルコミットを再生できます。

git rebase -i Origin/master

これにより、リベースが対話モードで呼び出され、リベースする履歴にない個々のコミットを適用する方法を選択できます。

git Push -fで)削除したコミットが既にローカル履歴にプルされている場合、それらは再適用されるコミットとして一覧表示されます-リベースの一部として削除する必要があるか、単にコミットに再含まれますブランチの履歴-そして次のプッシュでリモート履歴に再表示されます。

上記の(または他の)コマンドの詳細と例については、ヘルプgit command --helpを使用してください。

420
AD7six

これは、不要なコードを既に持っているブランチを修正しません(その方法については以下を参照してください)が、ブランチをいくつか引っ張り、クリーンにしたい場合(そして「先」ではない場合) Origin/some-branch)その後、単純に:

git checkout some-branch   # where some-branch can be replaced by any other branch
git branch base-branch -D  # where base-branch is the one with the squashed commits
git checkout -b base-branch Origin/base-branch  # recreating branch with correct commits

注:これらの間に&&を挿入することにより、これらすべてを組み合わせることができます

注2:フロリアンはコメントでこれについて言及しましたが、回答を探すときにコメントを読むのは誰ですか?

注3:ブランチが汚染されている場合は、新しい「ダムブランチ」に基づいて新しいブランチを作成し、コミットをチェリーピックするだけです。

例:

git checkout feature-old  # some branch with the extra commits
git log                   # gives commits (write down the id of the ones you want)
git checkout base-branch  # after you have already cleaned your local copy of it as above
git checkout -b feature-new # make a new branch for your feature
git cherry-pick asdfasd   # where asdfasd is one of the commit ids you want
# repeat previous step for each commit id
git branch feature-old -D # delete the old branch

これで、新しい(おそらく悪い)コミットのないブランチが機能追加されました!

15
Tom Prats