問題タブ [git-reset]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
git - ダミーのGitの復帰、チェックアウト、リセット
申し訳ありませんが、このgitコマンドのトリオは私の知性に負担をかけています。
これらの3つのgitコマンドをカバーするために、初心者向けのグループwikiを設定することは可能ですか?私が学ぼうとしているのは、ファイルとプロジェクトを以前の状態に復元またはロールバックする方法です。
私はSubversionやその他の集中型バージョン管理ソフトウェアの経験がないので、それらがどのように異なる方法で動作したかを参照する必要はなく、混乱を招くことがよくあります。
ありがとう。
git - Git Revert、Checkout、Resetの違いは何ですか?
git revert
ファイルとプロジェクトを以前の状態に復元またはロールバックする方法を学習しようとしていますが、、、、checkout
の違いがわかりませんreset
。一見同じ目的のために3つの異なるコマンドがあるのはなぜですか?また、誰かがどちらかを選択する必要があるのはいつですか?
git - 'git reset --soft'はno-opコマンドですか?
ドキュメントには、--soft
オプション「...インデックスファイルや作業ツリーにはまったく触れませんが、それらが適切な順序である必要があります。これにより、変更されたすべてのファイルがgitstatusとして「コミットされる変更」のままになると記載されています。それを置くだろう」。
また、指定されていない場合、ターゲットは<commit>
デフォルトでHEADになることも説明しています。
これらを考慮して、次のコマンドは何かを変更しますか?
$ git reset --soft
git - 'git reset --hard' 複数のリベース ブランチ
git rebase
最近実行したいくつかのブランチを含むローカル ref があります。
それは次のようになりました:
次の一連のコマンドを使用します。
問題?
git rebase --no-ff
以前にマージしたすべてのブランチを追跡するために、うっかり忘れていました。gitk --all
さて、マージがどこで行われたかを ( を使用して) 簡単に知る方法がありません。と の間のどこかで発生したことは知っていますが、各コミットを個別に実行しないと、道に迷ってしまいますHEAD@{E}
。HEAD@{J}
私がやろうと決めたこと:
したがって、ここでgit reflog
提案されているように使用し、2 つのリベースが発生する前に元の状態に戻してから、提案したようにしようと考えました。 git reset --hard HEAD@{#}
git rebase branchname --no-ff
私の究極の質問はこれです(いくつか追加):
最初のコミットの前に最後のコミットまで戻ることはできますrebase
か?それとも、各リベースを個別にロールバックする必要がありますか? トップブランチのそれぞれは、私が持っていたものとまったく同じですか (私が探している高速転送されていないマージを示しています)? 私はこれを難しくしすぎていますか/これを行う簡単な方法はありますか? 私が考えるのを怠っていることはありますか?
ありがとう。
git - git reset commit と push の問題
最近、私のチームで、新入社員が git pull を試みたことがありました。システムにいくつかの競合が発生した後、開発者は単純に git リセット (インデックスを最後の HEAD に移動) を行いました。次に、開発者は 1 つのファイルの変更を「コミット」し、それをリモートにプッシュしました。当然、かなり多くの変更が失われました。
しかし、誰が悪い変更を行ったのか (そしてどのコミットが悪いコミットだったのか) を突き止めるのにかなりの時間がかかり、それを回復することはまったく別の努力でした。git履歴(gitkまたはgitログを使用)では、gitはコミットされたファイルのみを表示しますが、これは以前のファイルを上書きする場合です(この概念はgitではなくCVSに近いことを知っています。この場合、ファイルは以前のコミットに移動されています)。この場合、デバッグするのに最適な戦略は何ですか?
どのブランチが問題を起こしているかがわかったら、良いコミットと悪いコミットの間で git diff を実行すると、ファイルのリストが表示されますが、特定のコミットだけを見ると、以前のコミットに移動されたファイルを見つけることができます。
問題が完全に解明されていない場合は、お詫び申し上げます。
git - 現在の変更を上書きせずにファイルを以前のバージョンに戻す方法は?
ファイルを以前のコミットに戻そうとすると問題git checkout
が発生します。単一のファイルを元に戻すために使用できることはわかっていますが、保持したいファイルに変更があるため、どうすればよいか疑問に思っていました単一ファイルの以前のコミットと現在のHEADの間の一種の「マージ」? 使用してみgit reset sha-of-my-commit path/to/my/file
ましたが、作業ディレクトリに最新バージョンを保持しながら、以前のバージョンをステージング領域に配置し、後で両方のファイルをマージする方法がわかりません。
私が今行ったことはgit diff ..sha-of-my-commit path/to/my/file
、不足している行をコピーして貼り付けただけですが、これを正しく行うためのより良い方法があるに違いないと思いますか?
git - なぜ「gitreset」"は1を返しますか?
foo.txt
それがインデックスにあると仮定します。
なぜ行うのか:
1を返します:
?
git - マージの変更を確認する前に、gitがHEADをリセットします
別のブランチからgitマージを実行すると、いくつかの競合が発生し、マージがコミットされない場合はどうなりますか?
再度マージできますか?または、gitはマージがすでに行われていると信じますか?
git - 'git reset --hard HEAD'を使用して前のコミットに戻すにはどうすればよいですか?
Gitはアプリケーションに加えた変更を追跡し、変更をコミットするまでGitはそれらを保持することを知っていますが、ここで電話を切ります。
以前のコミットに戻したい場合は、次を使用します。
そしてGitは次のように返します。
次に、ハードドライブ上のファイルを以前のコミットに戻すにはどうすればよいですか?
次のステップは次のとおりです。
しかし、私のハードドライブ上のファイルはどれも変更されていません...
私は正しい/間違っていることをしていますか?