git - 重设本地仓库会像HEAD的远程存储库

  显示原文与译文双语对照的内容

如何重置本地 仓库 分支与远程仓库上的分支一样?
我做了:


git reset --hard HEAD^

但当我做 git status的时候


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

请告诉我为什么我有这些'已经修改'? 我还没有碰这些文件? 如果是的话,我想删除那些。

时间:

将分支设置为与远程分支完全匹配可以通过两个步骤完成:


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"上,以防你决定将它的返回( 或者希望以后查看它,或者与更新后的分支不同) 。

请注意,第一个示例假定远程仓库的远程名称为"原点",并且远程存储库中名为"母版"的分支与本地仓库中的当前checked-out分支匹配。

顺便说一下,这种情况看起来很像一个普通的案例,在当前的non-bare知识库的分支中已经完成了推送。 你最近是否推入本地仓库? 如果没有,那么就不用担心--有其他东西导致这些文件意外地被修改了。 否则,你应该知道,不建议将它推入non-bare知识库( 不进入当前的checked-out分支,特别是) 。

git reset --hard HEAD 实际上只重置到上次提交的状态。 在这种情况下,HEAD指你的分支的头部。

如果你有几个提交,这将不起作用。

你可能想要做的,是重置到原点或者你远程存储库的名称。 我可能会做一些


git reset --hard origin/HEAD

小心,硬复位不能轻易撤销。 最好是像Dan建议的那样做,然后在重置之前去掉你的修改。

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


git fetch origin
git reset --hard origin/master

接着是:

 
git clean -f

 

删除本地文件

这是我经常面对的,&我已经概括了上面提供的脚本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

下面是一个自动化最流行答案的脚本:


#!/bin/bash
# reset the current repository
# WF 2012-10-15
# 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"`
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

我做了:


git branch -D master
git checkout master

完全重置分支


注意,你应该签出到另一个分支来删除所需的分支

如果你想回到工作目录和索引的HEAD 状态,那么你应该 git reset --hard HEAD ,而不是 HEAD^ 。 ( 这可能是一个印刷错误,就像 --hard 中的单个和双划线一样) 。

至于你的特定问题,为什么这些文件在状态中显示为已经修改,看起来你可能做了软重置而不是硬复位。 这将导致在 HEAD 提交中更改的文件看起来似乎是暂存的,这很可能是你在这里看到的。

如果你像我一样有问题,你已经承认了一些更改,但是现在,出于任何原因,最快速的方法是使用 git reset:


git reset --hard HEAD~2

我有 2不需要提交,因此数字 2. 你可以将它更改为你自己的提交次数来重置。

所以回答你的问题- 如果你是 5的远程仓库头的提交,你应该运行这个命令:


git reset --hard HEAD~5

注意,你将丢失所做的更改,因此小心 !

这是印刷错误是? git reset --hard HEAD δ? git reset -hard HEAD^ ,也就是说,如果还没有提交更改,。 我认为它是一个印刷错误,但以防万一,你可以:

但是你也可以做它说,为了防止你其他文件,你可能失去改变想保持。 所以:


git reset HEAD java/com/mycompany/TestContacts.java
git reset HEAD java/com/mycompany/TestParser.java

希望工作成功,如果我误解了你的问题。

首先,重置为先前提取的相应上游分支的HEAD:


git reset --hard @{u}

指定 @{u}的优点是不需要显式指定远程存储库和分支的名称。

接下来,获取最新的更改:

 
git pull

 
...