远程仓库更新导致push代码失败
参考自:
2023年10月26日
push 出错
可恶,之前在 GitHub 上在线修改了 notes 仓库里的文件,而我在本地又修改了许多代码,导致我把本地代码 push 到 GitHub 上时出错了
错误信息:
To https://github.com/Ratherthan17/my-website.git
! [rejected] main -> main (fetch first)
error: failed to push some refs to 'https://github.com/Ratherthan17/my-website.git'
hint: Updates were rejected because the remote contains work that you do not
hint: have locally. This is usually caused by another repository pushing to
hint: the same ref. If you want to integrate the remote changes, use
hint: 'git pull' before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.
解决办法:
1. 先将工作区中未完成的内容添加到暂存区

2. 查看本地库与哪些远程库有联系
- 在终端里输入
git remote -v查看本地库与哪些远程库有联系

3. 保存未完成的工作进度
- 输入
git stash save '信息'保存未完成的工作进度


4. 把远程库中的更新合并到本地库中
- 输入
git pull --rebase origin branch- origin 就是第二步输入
git remote -v后显示的与本地库有联系的远程库,不一定是 origin ,我这里就是 my-website ; - branch 是你要 push 到哪个分支就输入哪个分支,我这里是主分支 main
- origin 就是第二步输入

5. 恢复之前保存的工作进度
- 输入
git stash pop,把之前保存的工作进度恢复

6. 解决冲突
- 点击 Merge Changes 里的文件,在打开的窗口里点击标红的地方,跳转到冲突位置


- 以我这里的 Divination 为例,绿色区域(Current Change)是它在 GitHub 上的样子,蓝色区域(Incoming Change)是它在本地的样子。

- 要是想保留远程库的内容,就把本地的(蓝色区域)删掉,再删去 <<<<<<< Updated upstream 、 =======

- 要是想保留本地的内容,就把远程库(绿色区域)删掉,再删去 ======= 和 >>>>>>> Stashed changes

- 要是远程和本地的内容都想保留,就只需把 <<<<<<< Updated upsteam 、 ======= 和 >>>>>>> Stashed changes 删掉就可以了

-
使用 VSCode 提供的按钮可以很方便的进行修改
- 保留远程库的内容 ——> 点击
Accept Current Change
- 保留远程库的内容 ——> 点击

- 保留本地库的内容 ——> 点击
Accept Incoming Change

- 俩都保留 ——> 点击
Accept Both Changes

7. 取消暂存
- 之前第 5 步是恢复工作进度;第 6 步是解决冲突;这一步是把现在还没完成的、还不想提交的内容取消 暂存 ,可选。
- 现在应该已经可以 推送 了

- 另外,我发现我的 changes 少了(应该是我这个项目的问题,我做 “从我的 Github 上 clone 下来的网站,用 npm start 出错” 这篇笔记的时候就没少)

