1. ホーム
  2. git

任意のブランチをチェックアウトし、ローカルの変更を上書きする Git コマンド

2023-08-22 15:11:42

質問

次のことを安全かつ確実に行うための Git コマンド(あるいは一連の短いコマンド)はありますか?

  • ローカルの変更をすべて取り除く。
  • 必要ならオリジンから指定されたブランチをフェッチする
  • 指定されたブランチをチェックアウトしますか?

現在、行き詰っています。

git fetch -p
git stash
git stash drop
git checkout $branch
git pull

を実行すると、2回ほどパスワードを要求されるのが気になるところです。 fetchpull ). 一般的に、私はパスワードが一度だけ必要である限り、どのような解決策にも満足します。

2、3の注意事項。

  • あるアプリケーションの自作デプロイメントスクリプトの一部です (コードは GitHub にホストされています)。
  • ブランチがオリジンからすでに取得されているかどうかに違いはないはずです (つまり、新しいブランチの最初のデプロイでは、理想的には追加の手順は必要ないはずです)。
  • スクリプトは複数の人がアクセスできるリモート マシンに配置されるため、資格情報は保存されず、ユーザー/パスワードを入力する必要があります (ただし、可能であれば 1 回のみ)。
  • ローカルでの変更は気にしません。常に指定されたブランチの原始的なコピーが欲しいのです (デプロイ スクリプトのさらなる部分では、ローカルでの変更が発生します)。
  • 毎回新鮮なリポジトリをクローンまたはエクスポートできない; 時間がかかりすぎる。

どのように解決するのですか?

次のような解決策を取ることができます。 " git pull" でローカルファイルを強制的に上書きするには? " :

git fetch --all
git reset --hard origin/abranch
git checkout abranch 

これだとフェッチは1回で済みますね。

Git 2.23+では git checkout はここで git switch (ここで提示される) (まだ実験中)。

git switch -f $branch

-f のエイリアスである。 --discard-changes で述べたように Jan 's 答え )

<ブロッククオート

インデックスや作業ツリーがHEADと異なっていても進める。

インデックス、作業ツリーともに切替先と一致するように復元されます。


もし、あなたが ではない にしたい を切り替える という分岐がありますが リストア を実行すると、別のブランチのフォルダを git restore は他のコマンドで、古い時代遅れで混乱しがちな git checkout .

発表した git restore ここで .

git restore --source=anotherBranch --staged] [--worktree -- aFolder
# or, shorter:
git restore -s anotherBranch -SW -- aFolder