問題タブ [git-checkout]
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 uncheckout はありますか?
リポジトリがクローンされた後のチェックアウトを防止するgit clone
オプションがあります。これを手動で行う可能性はありますか?-n
HEAD
編集-n
オプションは、実際よりもマニュアルの方が読みやすいと思います。-n
すべてのツールでクローンを作成した後、まだマスターブランチに存在していることがわかります。唯一の違いは、すべてのファイルが削除済みとして表示されることです。私が「チェックアウトしていない」と呼ぶのと同じ状況ではありません。
だから多分私はちょうど削除する必要がありHEAD
ますか?
git - 別のブランチからファイルを 1 つだけ取得する方法は?
私は Git を使用しており、master
ブランチで作業しています。このブランチには、app.js
.
experiment
たくさんの変更と大量のコミットを行ったブランチがあります。app.js
ここで、すべての変更をfromexperiment
からmaster
ブランチにのみ適用したいと考えています。
それ、どうやったら出来るの?
繰り返しますが、マージは必要ありません。すべての変更をブランチapp.js
からブランチに持ち込みたいだけです。experiment
master
git - ギット。マージコミット間のチェックアウト機能ブランチ
ちょっと変ですが、gitではかなり一般的な操作を実行できません。基本的に私が欲しいのは、機能ブランチをチェックアウトすることです。ヘッドを使用するのではなく、SHAIDを使用します。このSHAは、マスターブランチからのマージを指します。
問題は、機能ブランチからのコミットなしで、マスターブランチだけを取得することです。現在、マスターブランチで以前に導入されたリグレッションを修正しようとしています。
よりわかりやすくするために、問題のあるリポジトリを再作成するための小さなbashスクリプトを作成しました。
基本的に私が欲しいのは、ファイル1〜4でブランチの「パッチ」をチェックアウトすることだけですが、test5.txtは含まれていません。
行うこと:
git checkout [sha_where_test4.txt_entered]
... test1、test3、test4でブランチを提供しますが、test2.txtは除外します
より複雑な例:
ありがとう。
git - gitリポジトリから1つのファイルだけをまばらにチェックアウトするにはどうすればよいですか?
gitリポジトリから1つのファイルだけをチェックアウトするにはどうすればよいですか?
git - 「git reset --hard hash」と「git checkout hash」に違いはありますか?
ほとんどの場合、reset
とcheckout
は用途が異なりますが、これら 2 つの間にどのような違いがあるのか わかりません。
--hard
基本機能でできることを行うためのオプションをわざわざ追加しようとは思わなかった人もいるでしょうcheckout
。
歴史の見方に違いがあるのではないでしょうか?
git - git stash blunder: git stash pop とマージの競合が発生しました
私はgit stash pop
実行し、マージの競合が発生しました。ファイル システムからファイルを削除し、git checkout
以下に示すように実行しましたが、ファイルがまだマージされていないと見なされます。次に、ファイルを置き換えて、git checkout
もう一度同じ結果を試してみました。-f
フラグでイベントを強制しようとしました。どんな助けでも大歓迎です!
git - 誤ってチェックアウトした後、変更を元に戻しますか?
以下は私のレポのステータスでした。
偶然にも、私はやったのですがgit checkout -f
、今やるべきではなかった変更がなくなりました。
変更を元に戻すことはできますか?
git - Git: ローカルの変更を元に戻すことはできません (エラー: パス ... はマージされていません)
次の作業ツリーの状態があります
ファイルfoo/bar.txt
があり、再び「変更されていない状態」に戻したい (「svn revert」と同様):
今では混乱しています:
新しいセクションと変更されたセクションの両方で同じファイルですか? 私は何をすべきか?
git - コミットをつぶすだけなのに、なぜ git-rebase でマージの競合が発生するのですか?
私たちの Git リポジトリには 400 件以上のコミットがあり、最初の数十件は試行錯誤の連続でした。多くのコミットを 1 つのコミットにまとめることで、これらのコミットをクリーンアップしたいと考えています。当然、git-rebase が適しているようです。私の問題は、マージの競合が発生し、これらの競合を解決するのが容易ではないことです。コミットを押しつぶすだけなので(削除や再配置ではなく)、なぜ競合が発生するのかまったくわかりません。おそらく、これは git-rebase がどのようにスカッシュを行うかを完全には理解していないことを示しています。
私が使用しているスクリプトの修正版は次のとおりです。
repo_squash.sh (これは実際に実行されるスクリプトです):
repo_squash_helper.sh (このスクリプトは repo_squash.sh でのみ使用されます):
repo_squash_list.txt: (このファイルは repo_squash_helper.sh でのみ使用されます)
「新着メッセージ」の内容はご想像にお任せします。最初は、「--strategy theirs」オプションなしでこれを行いました (つまり、デフォルトの戦略を使用します。ドキュメントを正しく理解している場合は再帰的ですが、どの再帰戦略が使用されているかわかりません)。動作しません。また、repo_squash_helper.sh のコメントアウトされたコードを使用して、sed スクリプトが動作する元のファイルを保存し、それに対して sed スクリプトを実行して、それが意図したとおりに動作していることを確認しました (そうだった)。繰り返しますが、なぜ競合が発生するのかさえわからないため、どの戦略が使用されるかはそれほど重要ではないようです。アドバイスや洞察は役に立ちますが、ほとんどの場合、この押しつぶしを機能させたいだけです。
Jefromi との議論からの追加情報で更新:
大規模な「実際の」リポジトリに取り組む前に、テスト リポジトリで同様のスクリプトを使用しました。これは非常に単純なリポジトリであり、テストは問題なく動作しました。
失敗したときに表示されるメッセージは次のとおりです。
これは、最初のスカッシュ コミット後の最初の選択です。実行git status
すると、クリーンな作業ディレクトリが生成されます。次に を実行するgit rebase --continue
と、さらに数回コミットした後、非常によく似たメッセージが表示されます。その後、もう一度実行すると、数十回コミットした後に、非常によく似た別のメッセージが表示されます。もう一度実行すると、今度は約 100 回のコミットが行われ、次のメッセージが表示されます。
次に を実行するgit status
と、次のようになります。
これは単なる選択の結果であるため、「両方が変更されました」というビットは私には奇妙に聞こえます。また、「競合」を見ると、[タブ] 文字で始まるバージョンと 4 つのスペースで始まるバージョンの 1 つの行に要約されることも注目に値します。これは、構成ファイルの設定方法に問題があるように聞こえましたが、そのようなものは何もありません。(core.ignorecase が true に設定されていることに注意しましたが、明らかに git-clone が自動的にそれを行ったようです。元のソースが Windows マシン上にあったことを考えると、まったく驚かないでしょう。)
file_X.cpp を手動で修正すると、その後すぐに別の競合が発生して失敗します。今回は、あるバージョンが存在すると見なすファイル (CMakeLists.txt) と、あるバージョンが存在しないと見なすファイル (CMakeLists.txt) の間です。このファイルが必要だと言ってこの競合を修正すると (私はそうします)、いくつかのコミットの後で (この同じファイルで) 別の競合が発生し、かなり重要な変更が加えられます。紛争の解決までの道のりは、まだ約 25% にすぎません。
これは非常に重要なことかもしれないので、このプロジェクトは svn リポジトリで始まったことも指摘しておく必要があります。その最初の履歴は、その svn リポジトリからインポートされた可能性が非常に高いです。
更新 #2:
ひばりで (Jefromi のコメントの影響を受けて)、repo_squash.sh を次のように変更することにしました。
そして、元のエントリをそのまま受け入れました。つまり、「リベース」は何かを変えるべきではありませんでした。先ほど説明したのと同じ結果になりました。
更新 #3:
または、戦略を省略して最後のコマンドを次のように置き換えると:
「コミットするものが何もない」リベースの問題はもうありませんが、他の競合はまだ残っています。
問題を再現するおもちゃのリポジトリで更新します。
test_squash.sh (これは実際に実行するファイルです):
test_squash_helper.sh (test_sqash.sh で使用):
PS: はい、私が emacs をフォールバック エディターとして使用しているのを見て、うんざりする方もいらっしゃると思います。
PPS: リベース後に既存のリポジトリのすべてのクローンを吹き飛ばさなければならないことはわかっています。(「公開後にリポジトリをリベースしてはならない」という行に沿って。)
PPPS: これに報奨金を追加する方法を誰か教えてもらえますか? 編集モードでも表示モードでも、この画面のどこにもオプションが表示されません。