将本地存储库分支重置为类似于远程存储库HEAD

[亡魂溺海] 提交于 2019-12-06 06:39:53

如何将本地分支重置为与远程存储库中的分支相同?

我做了:

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

您能告诉我为什么我要进行这些“修改”吗? 我还没有碰过这些文件? 如果我这样做了,我想删除那些。


#1楼

这是一个脚本,可自动执行最流行的答案所建议的内容...有关支持分支的改进版本,请参见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

#2楼

这是我经常要面对的事情,并且我已经概括了上面提供的与任何分支一起使用的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

#3楼

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

如果您有多次提交,则此操作将无效。

您可能想要做的是重置为原点或任何您称为远程存储库的名称。 我可能会做类似的事情

git reset --hard origin/HEAD

不过要小心。 硬重置无法轻易撤消。 最好按照Dan的建议进行操作,并在重设之前分支出所做更改的副本。


#4楼

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

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”的分支与本地仓库中当前已签出的分支匹配。

顺便说一句,您遇到的这种情况看起来很糟糕,就像一个普通情况,即已推送到非裸存储库的当前签出分支中。 您最近是否进入了本地仓库? 如果没有,那么就不用担心-某些其他原因一定会导致这些文件意外地被修改。 否则,您应该注意,不建议将其推送到非裸仓库(尤其是不要放入当前已签出的分支)。


#5楼

如果要同时返回工作目录和索引的HEAD状态,则应git reset --hard HEAD ,而不是HEAD^ 。 (这可能是一个错字,就像--hard的单破折号和双破折号一样。)

至于关于这些文件为何以修改后的状态显示的特定问题,似乎您进行了软重置而不是硬重置。 这将导致在HEAD提交中更改的文件看起来像是已暂存的,这很可能是您在此处看到的。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!