web-dev-qa-db-ja.com

smartgitはコミットを削除し、前のコミットに戻ります

誤ってコミットしたので、履歴ログから削除して前のコミットに戻したいと思います。戻りたいコミットをチェックアウトしようとしていますが、Smartgitはこれを行うためにローカルブランチを作成するように要求します(スクリーンショットを添付)。私はSGの専門家ではないため、本当にアドバイスが必要です。また、誤って行ったコミットを元に戻そうとしましたが、ログにコミットが表示されます。ログは次のようになります。

チェックアウトしようとすると:

enter image description here

私のログは現時点でどのように見えますか:

enter image description here

私がやりたいのは、ログから最初の2つのコミットを削除し、「Cambios Varios」コミット(そのコミットをチェックアウトしようとしたときに表示された緑色の矢印の付いたコミット)に戻ることです。

この混乱は、同僚がいくつかの変更を加えてファイルを追加し、次に彼の変更をコミットしたためです。ファイルを更新するためにプルを実行しましたが、ローカルリポジトリでファイルが更新されず、私の同僚によって追加されました。別のユーザーがPULL以外のコミットを行ったときに、すべてのフォルダーを更新するために他に何かしなければならないことはありますか?私はSmartGitにかなり慣れていないので、クリーンプルを実行しようとするたびに少し混乱します。どうもありがとう !

10
Lowtrux

あなたが求めているのはSmartGitに固有のものではなく、GIT全般に固有のものです。 SmartGitは非常に便利で完全な機能を備えていますが、単なるクライアントです。あなたの状況では、いくつかのGIT機能を考慮に入れる必要があります。

  1. ブランチ
  2. 公開されたコミット
  3. 切り離された頭
  4. リモート履歴の書き換え

追加情報を得るためにこれらのグーグル。それでは、コミットに名前を付けましょう。

enter image description here

branchがポイントしているため、commit Aが引き続き表示されます。これはあなたのlocalブランチmasterです。このブランチを好きなコミットにリセットすることができます。 SmartGitでこれを行うには、その緑色のブランチラベルをクリックして、他のコミットにドラッグします。それでおしまい。例えば。 Origin/masterが指しているcommitBにリセットすると、到達できるブランチがないため、このコミットはログに表示されなくなります。

厳密に言えば、Origin/masterブランチでも同じトリックを実行でき、他のコミットにリセットできます。ただし、publishedであるコミットBを指しているため、十分に注意する必要があります。つまり誰でもそれを自分のマシンに引っ張ってもらうかもしれません。確実にわからない場合は、誰かのリポジトリのコピーを壊す危険なしに、公開されたコミットからブランチをリセットすることはできません。

したがって、簡単な答えは、他のマシンにクローンされたリポジトリと競合する可能性があるため、リポジトリをコミットCに戻すことはできません。より長い答えはあなたがそれを試すことができるということです。

このリポジトリのクローンを作成しているのがあなたとあなたの同僚だけであることが確実な場合は、リモートログを書き換えすることができます。このために、コミットmasterでローカルのCブランチをリセットし(前に述べたようにドラッグアンドドロップで)、Pushそれ。 SmartGitは、そうすることを禁止している場合があります。[設定]/[コマンド]/[プッシュ]に移動し、[プッシュされたコミットの変更を許可する]オプションを有効にします。危険だから。

これにより、リモートmasterブランチの位置が書き換えられ、同僚のマシンからプルされます。彼がこのブランチに追加の変更を加えなかった場合、これは問題ないはずです。

9
Mikhail

TLDR:これがそのスクリーンショットです smatgit screenshot

4
David Dehghan