文章目录
1. 问题描述
远端服务器feature分支(非master主分支)其中一个代码文件发生了变化,需要下载并更新最新的代码到本地项目中,问如何更新代码到本地项目?
2. 解决方法
这里先声明,我是基于master主分支新建的分支feature下进行开发的,所以我是需要下载feature分支下的最新代码,而非master分支。
2.1 使用git fetch拉取代码
//在本地l临时新建一个temp分支,并将远程origin仓库的feature分支代码下载到本地temp分支
git fetch origin feature tmp
//来比较本地代码与刚刚从远程下载下来的代码的区别
git diff tmp
//合并temp分支到本地的master分支
git merge tmp
//如果不想保留temp分支 可以用这步删除
git branch -d tmp
//查看分支情况
git branch
2.2 使用git pull拉取代码
//取回远程主机某个分支的更新,再与本地的指定分支合并。
git pull <远程库名> <远程分支名>:<本地分支名>
//取回远程库中的feature分支,与本地的feature分支进行合并更新,要写成:
git pull origin feature:feature
//如果是要与本地当前分支合并更新,则冒号后面的<本地分支名>可以不写
git pull origin feature
这里说明一下git pull是git fetch和git merge两个步骤的结合。
2.3 在拉取代码与本地分支合并过程中报错:error: Your local changes to the following files would be overwritten by merge的解决
在2.1 和2.2操作中可能发生如下错误:
出现报错原因:有人在git服务器上直接修改文件,导致从git pull最新代码会提示这样的问题。
解决问题方法:
方法1非覆盖:保留拉取服务器代码之前本地修改的代码,并把git服务器上的代码pull到本地
git stash
git pull origin master
git stash pop
这样服务器上的代码更新到了本地,而且你本地修改的代码也没有被覆盖,之后使用add,commit,push 命令即可更新本地代码到服务器了。
方法2全覆盖:完全覆盖本地的代码,只保留服务器端代码,则直接回退到上一个版本,再进行pull
git reset --hard
git pull origin master
两者方法比较:
方法1非覆盖比较好用,且灵活性较强
方法2全覆盖会把服务器的代码全替代本地的代码,之前编写的代码会丢失
3. 总结
发现问题、解决问题、记录问题。