所以我在理解 Git 时遇到了一些麻烦。我在 Windows 上使用它,带有远程(安装 GitLab)repo。我有一个 master 分支的本地副本,并且我非常勤奋地git pull
经常使用以使我的本地副本保持最新。
所以现在是发布时间(当然……这不是发生这种情况的时候吗?)我想签入我已更改的 ONE 文件。我输入 agit pull
但收到错误:
error: Your local changes to the following files would be overwritten by merge:
<path>/filename.py
Please, commit your changes or stash them before you can merge.
Aborting
我使用git diff
了,果然,另一个开发人员在我尝试提交的同一个地方修复了一个错字。快速git status
揭示:
Your branch is behind 'origin/master' by 4 commits, and can be fast-forwarded
所以,不知所措,我将我的更改提交到我的本地仓库。
git add <filename>
git commit -m "reworking to ignore logs"
现在,我可以git pull
成功了。
git pull origin master
...
Merge made by the 'recursive' strategy
file1
file2...
....
<filename>
5 files changed, 1 insertion, 63 deletions...
现在,我可以将更改推送到远程仓库
git push
但是:这是我的问题。在远程服务器上,它显示了我的提交和我pull
提交后由我的本地引起的文件更改。也就是说,它基本上表明远程文件发生了变化,但实际上已更改为远程存储库 中已经存在的内容。
我的老板惊慌失措地打电话问我为什么要更改所有这些(其他四个)文件,我无法回答。我们最终检查了两个提交(当前和我之前的更改)并对其进行了比较,以证明只有我的一个文件的更改才是不同的,然后我们都松了一口气。
所以我的问题是:我错过了什么?为什么 Git 应该认为我想看到我更改了文件以匹配远程 HEAD,在远程?我已经看到这个关于git squash
ing的问题,并意识到也有一个git rebase
可以帮助我的问题。有人可以帮我理解为什么 Git 会这样做吗?我只是觉得好像我没有完全接受“分布式”范式转变。