如何恢复到源's主分支的文件版本

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

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

我该怎么做呢?

485395 次浏览

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

git checkout -- filename

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

git reset HEAD filename
git checkout -- filename

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

git checkout origin/master filename

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

git reset --hard origin/master

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

语法

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

例子

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

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

  • 脱离主分支(如git checkout -b oops/fluke/dang)
  • 在那里提交您的更改(如git add -u; git commit;)
  • 返回主分支(如git checkout master)

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

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

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

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

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

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

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


# for example: grf ./someChangedFile.txt

您需要找到最新的提交id和要恢复的文件的目录。

然后使用以下命令

git checkout [commit ID] -- path/to/file
git commit -m 'commit message'

将帮助您将想要的文件恢复到远程计算机上该文件的最新版本。

也可以使用git恢复

git restore --source origin/master filename