我如何将我的本地分支重新设置为远程存储库的分支类似?

我试过:

git reset --hard HEAD

但 git 状态声明我有修改的文件:

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

当前回答

这是我经常面对的事情,我已经普遍化了上面的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 reset --hard HEAD 实际上只会重新设置到最后的承诺状态. 在这种情况下, HEAD 指的是您的分支的 HEAD。

如果你有几个承诺,这不会工作。

你可能想做的事情,是重新设置到起源头或你远程存储所叫什么。

git reset --hard origin/HEAD

但是要小心. 硬重新设置不能轻易失去. 最好按照 Dan 建议做,并在重新设置之前将您的更改复制。

答案

git clean -d -f

已被低估(d 删除目录) 谢谢!

如果您不关心节省本地更改,但仍然希望更新您的存储库以匹配起源/头,您可以简单地插入本地更改,然后拖动:

git stash
git pull

以前的答案假设要重新设置的分支是当前的分支(检查出来)。在评论中,OP hap497澄清了分支实际上被检查出来,但这不是原始问题明确要求的。 由于至少有一个“重复”问题,重新设置分支完全到存储状态,这并不假设分支被检查出来,这里有一个替代方案:

git update-ref refs/heads/mybranch myremote/mybranch

這種方法讓檢查的分支如同它一樣,工作樹不受觸摸,它只是將分支的頭轉移到另一個承諾,無論是第二個論點,這是特別有用的,如果多個分支需要更新到新的遠方頭。

您可以查找起源并重新设置以解决问题

 git fetch origin
 git reset --hard origin/main

您可以在重新设置之前保存您的更改,如下:

git stash

然后重新设置,如果你想要改变它,你可以简单地运行,

git stash apply