checkout 任何分支并覆盖本地更改的 Git 命令

标签 git deployment git-checkout

是否有 Git 命令(或一小段命令)可以安全可靠地执行以下操作?

  • 摆脱任何本地更改。
  • 如有必要,从原点获取给定的分支
  • 检查给定的分支?

目前我坚持:

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

但这让我很困扰,因为我被要求输入密码两次(通过 fetchpull)。 一般来说,只要密码只需要一次,我就会对任何解决方案感到满意。

一些注意事项:

  • 它是应用程序的自制部署脚本的一部分(代码托管在 GitHub 上)。
  • 分支是否已经从源获取应该没有区别(即新分支的首次部署理想情况下不应该需要任何额外的步骤)。
  • 该脚本位于可由多个人访问的远程计算机上,因此不存储凭据并且必须输入用户名/密码(但如果可能只输入一次)。
  • 我不关心任何局部变化;我总是想要给定分支的原始副本(部署脚本的进一步部分会产生本地更改)。
  • 我无法每次都克隆或导出新的存储库;这需要太多时间。

最佳答案

您可以采用类似于"How do I force “git pull” to overwrite local files? " 的解决方案:

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

那将只涉及一次获取。

在 Git 2.23+ 中,git checkout 在这里被替换为 git switch (presented here) (仍处于实验阶段)。

git switch -f $branch

(使用 -f being an alias for --discard-changes,如 Jananswer 中所述)

Proceed even if the index or the working tree differs from HEAD.
Both the index and working tree are restored to match the switching target.


如果您不想切换分支,而只是恢复来自另一个分支的文件夹,那么git restore是替代旧的过时且令人困惑的 git checkout 的另一个命令。
我提出了git restore here .

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

关于 checkout 任何分支并覆盖本地更改的 Git 命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18487089/

相关文章:

git reset --soft - 它返回到 git checkout 点还是最后一个 git merge 点?

带引号的 git checkout 分支

Git:在不提交的情况下切换工作区(计算机)

linux - 为多台机器保存 docker 配置的 Git 策略

git - 如何减小 Git 或 Github 存储库上的最大文件大小?

deployment - Firebase 部署 404 找不到 index.html

ios - App Bundle 中包含核心数据存储

java - 使用 gitflow-maven-plugin 从发布分支发布到主控的正确 Maven 命令是什么?

git - SSH 无法确定 [server] 的真实性

php - Laravel 5.3 - 未找到 InvalidArgumentException View [索引]