问个白痴的 git 问题,如何恢复被 git rm <somefiles>删掉的文件?

2016-12-19 23:26:58 +08:00
 ioiioi
是这样的,我在 bitbucket 中创建了一个私有仓库,公司和家里各一台电脑关联到该私有仓库,家里的电脑前几天修改了仓库中的一个文件: file.txt ,然而当时没有 git push origin master ,然后这几天中在公司的电脑中修改了这个文件,并 git push origin master ,现在我想取消掉家里电脑对 file.txt 这个文件的修改,然后使用 git pull origin master 将私有仓库的 file.txt 最新版本下载下来,正确的操作流程应该是怎样的?

PS :我现在已经在家里的电脑中使用 git rm file.txt 了,但是接着使用 git pull origin master 并不会将 file.txt 从私有仓库中下下来。
4982 次点击
所在节点    问与答
8 条回复
forgcode
2016-12-19 23:44:21 +08:00
checkout 一下放弃修改!
ioiioi
2016-12-20 00:20:12 +08:00
嗯,我用 git reset --hard HEAD^回退到上一个 commit 之前的状态,把 git rm file.txt 给找回来了。接着我又用 git pull origin master ,出现如下错误:

```
....
Unmerged paths:
(use "git add <file>..." to mark resolution)

both modified: _sass/_layout.scss
both modified: css/main.scss
both modified: index.html
```

我现在的问题是,我想用远端仓库的文件,覆盖掉本地的这三个文件。该如何操作?
@forgcode
entimm
2016-12-20 00:27:41 +08:00
git checkout origin/master --file1 file2 file3
SoloCompany
2016-12-20 01:46:47 +08:00
显然你的信息存在误导的地方
假如你的信息是正确的,版本的衍生过程是
家里: A0 - A1 (edit file.txt)
公司: A0 - A2 (edit file.txt)
repo: A0 - A2 (edit file.txt)

如果是正确的话, git reset --hard HEAD^ 就回到了 A0 这个点, pull 不会有任何冲突
肯定是你做了不止一个提交才会有这种情况

如果你确定本地所有变更都是无用的,可以直接放弃所有
git fetch origin
git backup # 为防止你做错事情,先备份一下
git checkout master # 回到 master
git reset --hard origin/master
SoloCompany
2016-12-20 01:47:17 +08:00
居然手快打错了
git backup -> git branch backup
ioiioi
2016-12-21 10:30:11 +08:00
@SoloCompany
我昨天直接修改了那 3 个文件,然后 git commit , git pull 就解决了前面的问题。我现在还有另外一个问题:
家里: A0 - A1 (edit file1.txt)
公司: A0 - A2 (edit file2.txt)
repo: A2
假设公司衍生了 A2 ,并 push 到 repo ,但是这个时候,家里并不知道,仍然在 A0 的基础上衍生出 A1 ,并且做了 git add , git commit ,只是 git push origin master 出现错误,这个时候该怎么解决冲突?
SoloCompany
2016-12-21 10:34:00 +08:00
@ioiioi 如果你不希望出现菱形合并,那么
git reset A0
git stash
git pull
git stash pop
然后提交你的变更就好了

第一个 reset 命令不会丢失任何本地变更,也不会丢失 A1 的变更
相反 A1 变更都回到了本地
为避免 pull 发生冲突, stash 一下是比较安全的做法
ioiioi
2016-12-21 17:11:47 +08:00
@SoloCompany 谢谢!
我再学习学习 git

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/328752

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX