将本地存储库分支重置为就像远程存储库 HEAD

问题描述:

如何将我的本地分支重置为就像远程存储库上的分支一样?

我做了:

git reset --hard HEAD

但 git status 声称我修改了文件:

On branch master
Changes to be committed:
  (use "git reset HEAD ..." to unstage)
      modified:   java/com/mycompany/TestContacts.java
      modified:   java/com/mycompany/TestParser.java

解决方案1:

huntsbot.com – 高效赚钱,自由工作

将您的分支设置为与远程分支完全匹配可以分两步完成:

git fetch origin
git reset --hard origin/master

如果您想在执行此操作之前保存当前分支的状态(以防万一),您可以执行以下操作:

git commit -a -m "Saving my work, just in case"
git branch my-saved-work

现在,您的工作将保存在“my-saved-work”分支中,以防您决定将其取回(或想稍后查看或将其与更新后的分支进行比较)。

请注意,第一个示例假定远程仓库的名称是“origin”,并且远程仓库中名为“master”的分支与本地仓库中当前签出的分支匹配。

顺便说一句,你所处的这种情况看起来很像一个常见的情况,即推送到非裸存储库的当前签出分支中。您最近是否推入了本地仓库?如果没有,那么不用担心——一定是其他原因导致这些文件意外地最终被修改。否则,您应该知道不建议推送到非裸存储库(特别是不要推送到当前签出的分支)。

谢谢您的回答。你说'请注意,第一个示例假设远程仓库的名称是“origin”,并且远程仓库中名为“master”的分支与本地仓库中的分支匹配。在执行“git reset --hard”之前,如何仔细检查远程仓库的名称和分支名称以确保?再次感谢。

如果您没有明确命名遥控器,那么它的名称可能只是“原点”(默认值)。您可以使用“git remote”来获取所有远程名称的列表。然后,您可以使用“git remote ”查看哪些分支相互推/拉(例如,如果您的“master”分支是从名为“origin”的远程“master”克隆的,那么您将得到一行上面写着“主与远程主合并”)。

“不建议推入非裸存储库(特别是不要推入当前签出的分支)”为什么?

就在获取之后,我相信你也可以做git reset FETCH_HEAD --hard,同样的意思。

它没有删除我添加的文件。

解决方案2:

huntsbot.com – 高效赚钱,自由工作

我需要做(已接受答案中的解决方案):

git fetch origin
git reset --hard origin/master

其次是:

git clean -f

to remove local files

要查看将删除哪些文件(而不实际删除它们):

git clean -n -f

此外,如果存在未跟踪的目录,则为 git clean -d -f。

还有git clean -fdx

如果你想要远程分支的精确副本,你必须遵循 git clean -ffdx。请注意,这是两个 f。

git clean -f 是我需要的重要部件。谢谢!

小心使用 clean 命令。它可以从其他分支中删除被忽略的文件。

解决方案3:

huntsbot.com提供全网独家一站式外包任务、远程工作、创意产品分享与订阅服务!

首先,使用 git reset 重置为相应上游分支的先前获取的 HEAD:

git reset --hard @{u}

指定 @{u} 或其详细形式 @{upstream} 的优点是不必显式指定远程 repo 和分支的名称。在 Windows 或 PowerShell 中,指定 “@{u}”(带双引号)。

接下来,根据需要,使用 git clean 删除未跟踪的文件,也可以选择使用 -x:

git clean -df

最后,根据需要,获取最新的更改:

git pull

这似乎比接受的答案更好,因为它会动态重置到当前的上游分支,而不是总是像 origin/master 这样的静态分支

@GangadharJannu git reset --hard 需要提交,否则它不知道将您重置为什么。 @{u} 指向一个特定的提交 - 跟踪分支的头部,从您上次执行 git fetch 开始。

@KristofferBakkejord 感谢您的解释,但即使没有提交哈希,我们也可以执行 git reset --hard 虽然它不会重置为远程分支

对于几乎在这里提出新问题的其他人,如果您从 Powershell 进行 git,请使用引号 (git reset --hard "@{u}")。我花了一段时间才弄清楚。

使用引号的@MPStoering 在 Windows 上的 git bash 中也适用于我。干杯

解决方案4:

huntsbot.com提供全网独家一站式外包任务、远程工作、创意产品分享与订阅服务!

git reset --hard HEAD 实际上只重置为最后提交的状态。在这种情况下,HEAD 是指您的分支的 HEAD。

如果您有多个提交,这将不起作用…

您可能想要做的是重置为源头或远程存储库被调用的任何内容。我可能会做类似的事情

git reset --hard origin/HEAD

不过要小心。硬重置不能轻易撤消。最好按照 Dan 的建议去做,并在重置之前将更改的副本分支出来。

我的回答中有一个不正确的建议,丹早些时候发现了。我把它删掉了,因为我不想让任何人误入歧途。至于 origin/master 或 origin/HEAD 的东西,我希望这取决于你是否真的先进行 fetch。如果您只是克隆了 origin,并且它没有其他分支,我发现这很常见,那么它应该重置它。但当然,丹是对的。

解决方案5:

huntsbot.com汇聚了国内外优秀的初创产品创意,可按收入、分类等筛选,希望这些产品与实践经验能给您带来灵感。

以上所有建议都是正确的,但通常要真正重置您的项目,您还需要删除 .gitignore 中的文件。

要获得擦除项目目录并从远程重新克隆的道德等价物是:

git fetch
git reset --hard
git clean -x -d -f

警告:git clean -x -d -f 不可逆,您可能会丢失文件和数据(例如,您使用 .gitignore 忽略的内容)。

警告:“git clean -x -d -f”是不可逆的,您可能会丢失 .gitignore 中的文件和数据

稍短一点:git clean -xdf 等于 git clean -x -d -f。

git clean -ffxd 删除所有不在 repo 中的东西

解决方案6:

一个优秀的自由职业者,应该有对需求敏感和精准需求捕获的能力,而huntsbot.com提供了这个机会

使用以下命令。这些命令也会从本地 git 中删除所有未跟踪的文件

git fetch origin
git reset --hard origin/master
git clean -d -f

这是一个更完整的响应,因为如果没有 git clean -d -f,我们仍然会在本地目录中保留旧分支的一些内容。谢啦。

git clean -ffxd 真正删除所有内容

解决方案7:

huntsbot.com高效搞钱,一站式跟进超10+任务平台外包需求

这个问题在这里混合了两个问题:

如何将本地分支重置到远程是如何清除暂存区域(可能还有工作目录)的位置,以便 git status 表示没有任何提交,工作目录干净。

一站式答案是:

git fetch --prune (可选)更新远程仓库的本地快照。其他命令仅是本地命令。 git reset --hard @{upstream}将本地分支指针指向远程快照所在的位置,并将索引和工作目录设置为该提交的文件。 git clean -d --force 删除阻碍 git 说“工作目录干净”的未跟踪文件和目录。

@{upstream} 语法需要设置上游,如果您使用 git checkout ,则默认情况下会发生这种情况。 – 否则将其替换为 origin/。

将 -x 添加到 git clean 以删除不在提交中的所有内容(即,即使是使用 .gitignore 机制忽略的文件)。

解决方案8:

保持自己快人一步,享受全网独家提供的一站式外包任务、远程工作、创意产品订阅服务–huntsbot.com

假设远程存储库是 origin,并且您对 branch_name 感兴趣:

git fetch origin
git reset --hard origin/

此外,您还可以将 origin 的当前分支重置为 HEAD。

git fetch origin
git reset --hard origin/HEAD

这个怎么运作:

git fetch origin 从远程下载最新版本,而不尝试合并或变基任何内容。

然后 git reset 将 <branch_name> 分支重置为您刚刚获取的内容。 --hard 选项更改工作树中的所有文件以匹配 origin/branch_name 中的文件。

我不确定我是否在此处关注 origin/HEAD,我认为这不正确

解决方案9:

huntsbot.com精选全球7大洲远程工作机会,涵盖各领域,帮助想要远程工作的数字游民们能更精准、更高效的找到对方。

这是我经常遇到的问题,我已经概括了 Wolfgang 上面提供的脚本以适用于任何分支

我还添加了“你确定”提示和一些反馈输出

#!/bin/bash
# reset the current repository
# WF 2012-10-15
# AT 2012-11-09
# see http://stackoverflow.com/questions/1628088/how-to-reset-my-local-repository-to-be-just-like-the-remote-repository-head
timestamp=`date "+%Y-%m-%d-%H_%M_%S"`
branchname=`git rev-parse --symbolic-full-name --abbrev-ref HEAD`
read -p "Reset branch $branchname to origin (y/n)? "
[ "$REPLY" != "y" ] || 
echo "about to auto-commit any changes"
git commit -a -m "auto commit at $timestamp"
if [ $? -eq 0 ]
then
  echo "Creating backup auto-save branch: auto-save-$branchname-at-$timestamp"
  git branch "auto-save-$branchname-at-$timestamp" 
fi
echo "now resetting to origin/$branchname"
git fetch origin
git reset --hard origin/$branchname

您可能想使用“git remote”来获取遥控器的名称。在某些情况下,它不会是“起源”

您脚本中的逻辑不正确。 [ "$REPLY" != "y" ] || 将仅跳过下一行 echo "about to auto-commit any changes" 并继续运行脚本的其余部分。该行的内容应类似于 [[ "$REPLY" != "y" ]] && { echo "Exiting branch reset"; exit; }。

解决方案10:

huntsbot.com – 程序员副业首选,一站式外包任务、远程工作、创意产品分享订阅平台。

我做了:

git branch -D master
git checkout master

完全重置分支

请注意,您应该结帐到另一个分支才能删除所需的分支

您应该再次阅读问题,没有任何影响远程,但设置为与远程相同,因此您不应该对远程执行任何操作,这对我的情况有所帮助,而不是以上。

如果您想将其设置为与远程相同,您至少应该在某个时候进行提取,您不同意吗?

你至少应该试试这个或阅读文档:kernel.org/pub/software/scm/git/docs/git-checkout.html

走的路,我在分支中有一个损坏的 .pck 文件,其余选项不起作用,谢谢!!

解决方案11:

huntsbot.com高效搞钱,一站式跟进超10+任务平台外包需求

这是一个脚本,可以自动执行最流行的答案所建议的内容…有关支持分支的改进版本,请参见 https://stackoverflow.com/a/13308579/1497139

#!/bin/bash
# reset the current repository
# WF 2012-10-15
# see https://stackoverflow.com/questions/1628088/how-to-reset-my-local-repository-to-be-just-like-the-remote-repository-head
timestamp=`date "+%Y-%m-%d-%H_%M_%S"`
git commit -a -m "auto commit at $timestamp"
if [ $? -eq 0 ]
then
  git branch "auto-save-at-$timestamp" 
fi
git fetch origin
git reset --hard origin/master

原文链接:https://www.huntsbot.com/qa/w74e/reset-local-repository-branch-to-be-just-like-remote-repository-head?lang=zh_CN

与HuntsBot一起,探索全球自由职业机会–huntsbot.com

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值