这种情况下,如何保留本地的修改同时又把远程的合并过来呢?
首先取决于你是否想要保存本地修改。(是 /否)
是 别急我们有如下三部曲
git stash git pull origin master git stash pop git stash的时候会把你本地快照,然后git pull 就不会阻止你了,pull完之后这时你的代码并没有保留你的修改。惊了! 别急,我们之前好像做了什么?
STASH 这时候执行git stash pop你去本地看会发现发生冲突的本地修改还在,这时候你该commit push啥的就悉听尊便了。
否 既然不想保留本地的修改,那好办。直接将本地的状态恢复到上一个commit id 。然后用远程的代码直接覆盖本地就好了。
git reset --hard git pull origin master
Pull is not possible because you have unmerged files.
本地的push和merge会形成MERGE-HEAD(FETCH-HEAD), HEAD(PUSH-HEAD)这样的引用。HEAD代表本地最近成功push后形成的引用。MERGE-HEAD表示成功pull后形成的引用。可以通过MERGE-HEAD或者HEAD来实现类型与svn revet的效果。
解决:
1.将本地的冲突文件冲掉,不仅需要reset到MERGE-HEAD或者HEAD,还需要--hard。没有后面的hard,不会冲掉本地工作区。只会冲掉stage区。
git reset --hard FETCH_HEAD 2.git pull就会成功。
如果hard后想再恢复
简单粗暴:git reflog,然后找到需要回滚到的版本git reset --hard HEAD@{x}(x为列表中对应的记录编号)
只要提交过的commit基本都能在git reflog里面找到,通常是最近100条。
强推远端仓库:
1. 使用 git log --pretty=oneline 命令查看所有的历史版本,获取某个历史版本的id,假设查到历史版本的id是139dcfaa558e3276b30b6b2e5cbbb9c00bbdca96。
2. 版本回退(一般只需要取版本号的最前面4位数) git reset --hard 139dc 3. 把修改推到远程服务器 git push -f -u origin master
强拉:
git fetch --all && git reset --hard origin/master && git pull