78

次のことを安全かつ確実に行う Git コマンド (またはコマンドの短いシーケンス) はありますか?

  • ローカルの変更を取り除きます。
  • 必要に応じて、オリジンから指定されたブランチを取得します
  • 指定されたブランチをチェックアウトしますか?

現在、私は立ち往生しています:

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

fetchしかし、パスワードの入力を 2 回 (と で)求められるので、困っていますpull一般的に、パスワードが一度だけ必要になる限り、私はどんな解決策にも満足しています.

いくつかのメモ:

  • これは、アプリケーションの自作のデプロイ スクリプトの一部です (コードは GitHub でホストされています)。
  • ブランチがすでにオリジンからフェッチされているかどうかに違いはありません (つまり、新しいブランチの最初のデプロイでは、理想的には追加の手順は必要ありません)。
  • スクリプトは、複数のユーザーがアクセスできるリモート マシン上にあるため、資格情報は保存されず、ユーザー/パスワードを入力する必要があります (ただし、可能であれば 1 回だけ)。
  • ローカルの変更は気にしません。特定のブランチの元のコピーが常に必要です (デプロイ スクリプトの後半部分でローカルの変更が生成されます)。
  • 毎回新しいリポジトリを複製またはエクスポートすることはできません。時間がかかりすぎます。
4

4 に答える 4

114

「 "git pull" でローカル ファイルを上書きするにはどうすればよいですか?ような解決策に従うことができます。

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

これには、1 回のフェッチのみが含まれます。

Git 2.23+ では、ここでは(presented here) (まだ実験段階)git checkoutに置き換えられています。git switch

git switch -f $branch

Jan回答に記載されているよう-fに、のエイリアスです--discard-changes

インデックスやワーキングツリーがHEADと異なっていても進めます。
インデックスと作業ツリーの両方が、切り替え先に一致するように復元されます。


ブランチを切り替えたくないが、別のブランチからフォルダを復元するだけの場合は、古くて紛らわしい. ここ に提示しました。git restoregit checkout
git restore

git restore --source=anotherBranch --staged] [--worktree -- aFolder
# or, shorter:
git restore -s anotherBranch -SW -- aFolder
于 2013-08-28T12:24:41.087 に答える
13

git reset状況によってはやり過ぎになる可能性がありgit cleanます(そして、時間の無駄になります)。

「次の追跡されていないファイルは上書きされます...」のようなメッセージが表示され、競合する追跡されていないファイルをリモート/オリジン/アップストリームに上書きさせたい場合git checkout -f <branch>は、これが最適なオプションです。

あなたが私のような人なら、あなたの他のオプションは--hard reset、プロジェクトをクリーンアップして実行してから再コンパイルすることでした。

于 2015-08-20T10:38:17.187 に答える
3

新しいgit-switchコマンド(GIT 2.23 以降) には、--discard-changes役立つフラグもあります。git pull後で必要になるかもしれません。

警告: まだ実験的なものと見なされます。

于 2020-01-28T14:37:01.883 に答える