如何将本地分支重置为与远程存储库中的分支相同?
我做了:
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
提交中更改的文件看起来像是已暂存的,这很可能是您在此处看到的。