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

我试过:

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

当前回答

上面的所有提示都是正确的,但很多时候,为了真正重新设置您的项目,您还需要删除即使是您的.gitignore 中的文件。

要从远程中删除您的项目目录和重新克隆的道德等级是:

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

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

其他回答

唯一的解决方案,在所有情况下工作,我已经看到的是删除和分解. 也许有另一种方式,但显然,这种方式不会留下旧状态的机会,所以我更喜欢它。

REPO_PATH=$(pwd) && GIT_URL=$(git config --get remote.origin.url) && cd .. && rm -rf $REPO_PATH && git clone --recursive $GIT_URL $REPO_PATH && cd $REPO_PATH

* 假设您的.git 文件不受腐败

这里是一个自动化最受欢迎的答案的脚本... 查看 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

如果你想回到工作目录和指数的 HEAD 状态,那么你应该去重新设置 --hard HEAD,而不是到 HEAD^。

至于你的具体问题,为什么这些文件出现在变更状态,似乎你做了一个软重新设置而不是一个硬重新设置。

这是我经常使用的:

git fetch upstream develop;
git reset --hard upstream/develop;
git clean -d --force;

請注意,這是一個很好的做法,不做變化到您的當地主/開發分支,但相反,支票到另一個分支,任何變化,與分支名稱由變化類型,例如 feat/, chore/, fix/,等,所以你只需要拖動變化,不推任何變化從主。

git remote --verbose

git checkout develop;
git commit -m "Saving work.";
git branch saved-work;
git fetch upstream develop;
git reset --hard upstream/develop;
git clean -d --force

git add .
git commit -m "Reset to upstream/develop"
git push --force origin develop

git merge -s recursive -X theirs develop

使用时

git merge -s recursive -X ours develop

与所有的变化相结合:

git commit -m "Saving work.";
git branch saved-work;
git checkout develop;
git fetch upstream develop;
git reset --hard upstream/develop;
git clean -d --force;
git add .;
git commit -m "Reset to upstream/develop";
git push --force origin develop;
git checkout branch_name;
git merge develop;

请注意,而不是上流/开发,您可以使用一个承诺标签,其他分支名称等 使用一个 CLI 工具,如 Oh My Zsh 检查您的分支是绿色的,表明没有什么承诺和工作目录是干净的(这是确认或也可以通过 git 状态验证)。

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

git fetch origin
git reset --hard origin/master

其次是:

git clean -f

删除本地文件

查看哪些文件将被删除(没有实际删除):

git clean -n -f