5

Gitは驚異的なツールですが、プッシュされた変更を元に戻すための最善の方法については、まだ頭を悩ませていません。これが状況です。

私はブランチにいて、GitHubにいくつかのコミットをプッシュしました。それ以来、私はうさぎの穴を行き過ぎたと判断されました。私が行ったコミットのいくつかを破棄して、最初からやり直す必要があります。基本的に、プッシュされたすべてのコミットを元に戻す必要があります。これが私が適切だと思う2つのコマンドです

git revert  # - creates a new commit that "undoes" the changes of one specific commit
git checkout 'commit SHA' # - sets the head to that specific commit, wherein I will re-push to the repo, undoing my changes... I think

だから、私は正しいですか?戻りたい特定のコミットでgitcheckoutを実行する必要がありますか?それとも、この複雑なプロセスの中に、私が理解していない何かがありますか?

ありがとう。

4

3 に答える 3

5

プッシュしたものの状態に応じて、2つのシナリオがあります。

  • プッシュされたブランチはまだ誰も使用していません。その場合git reset、ローカルブランチを特定のコミットに強制するために使用できます。次に、パラメーターを使用git pushしてブランチを作成できます。--force

  • ただし、誤ってプッシュしたブランチに基づいて作業を行っている人がいる場合は、実際にリセットすることはできません。その場合、彼はブランチの変更をリンボに基づいて行うためです。ここで効果がありgit revertます。以前の変更を効果的に元に戻す逆パッチを記録します。ここでの利点は、他の人が簡単にブランチに基づいて作業できることです。

方法の選択は、リポジトリの状態と、偶発的なパッチがそこに存在していた期間によって異なります。開発者が少ない場合は、コミュニケーションとaresetがおそらく答えです。しかし、物事を長期間存続させておくと、履歴全体を書き直したい場合を除いて、元に戻す方がおそらく良いでしょう!

それを見る別の方法はこれです:歴史の破壊的な書き直しであるのgit revertに対して永続的です。git reset / git push --force両方に適切な時期があります。

最後に、私がウサギの穴を下ってアリスを追跡し、その先にあるものを調査するとき、私は通常、ローカルで作成されたブランチでそれを行います。次に、変更が気に入った場合は、通常、それらをテストブランチにマージし、テストブランチで少しかき混ぜてから、にマージしますmaster。そうすれば、多くの場合、問題を回避できます。要するに、私はしばしば20-30のローカルブランチを持っており、私が取り組んでいる機能ごとに1つです。それらは最初に個別にテストされる傾向があります。ときどき、新しいブランチを作成し、testすべてをそのブランチにマージして、すべてのテストを一緒に実行します。ブランチ間の競合を追跡するために、を使用しますgit rerere。利点は、機能が他の機能にプッシュするのに十分安定している時期を判断できることです。

于 2011-01-27T16:08:28.920 に答える
-1

Horiaが正しく指摘したように、gitをリセットする必要があります。

Gitチェックアウトとは、別のブランチに切り替えることを意味します。または、checkout -bを使用して、新しいブランチを作成し、すぐに切り替えることができます。

于 2011-01-27T15:54:05.893 に答える
-3

試してください:http git reset//git-scm.com/docs/git-reset

于 2011-01-27T15:52:08.103 に答える