我在我的本地计算机的主分支的一个克隆的主分支的一个远程服务器的回购。

我更新了一个文件,我想从远程主分支恢复到原始版本。

我该怎么做呢?


当前回答

如果你还没有把它提交给主分支,它很容易:

退出主分支(比如git checkout -b oops/fluke/dang) 在那里提交你的更改(比如git add -u;git提交。) 返回主分支(如git checkout master)

您的更改将保存在分支oops/fluke/dang;主人还是老样子。

其他回答

假设您没有提交文件,或将其添加到索引,那么:

git checkout -- filename

假设你将它添加到索引中,但没有提交它,那么:

git reset HEAD filename
git checkout -- filename

假设你确实犯了错,那么:

git checkout origin/master filename

假设你想从你的分支吹走所有的提交(非常破坏性):

git reset --hard origin/master

为了添加一个替代方案(当然不一定是一个更好的),如果你之前已经提交了文件,但现在你需要撤消更改,下面是你可以做的:

git diff HEAD..master -- path/to/file.ext | git apply -

这将生成一个差异以将文件恢复到主分支中的版本,然后应用它。git apply后的负号告诉git从标准输入读取补丁。

然后可以像往常一样提交文件。

下面是用shell函数表示的相同命令:

# Git Reset File
function grf() {
  git diff HEAD..master -- $1 | git apply -
}

# for example: grf ./someChangedFile.txt

我也遇到过同样的问题,遇到了这个线程,但我的问题是上游。下面的git命令对我有用。

语法

git checkout {remoteName}/{branch} -- {../path/file.js}

例子

git checkout upstream/develop -- public/js/index.js

还可以用git做恢复吗

Git恢复——源源/主文件名

如果你还没有把它提交给主分支,它很容易:

退出主分支(比如git checkout -b oops/fluke/dang) 在那里提交你的更改(比如git add -u;git提交。) 返回主分支(如git checkout master)

您的更改将保存在分支oops/fluke/dang;主人还是老样子。