Git 生命周期
Git冲突:commit your changes or stash them before you can merge. 用git pull来更新代码,遇到的问题:
error: Your local changes to the following files would be overwritten by merge:
xxx/xxx/xxx.java
Please, commit your changes or stash them before you can merge.
Aborting
stash
git stash
git pull
git stash pop
接下来diff一下此文件看看自动合并的情况,并作出相应修改。
- git stash: 备份当前的工作区的内容,从最近的一次提交中读取相关内容,让工作区保证和上次提交的内容一致。同时,将当前的工作区内容保存到Git栈中。
- git stash pop: 从Git栈中读取最近一次保存的内容,恢复工作区的相关内容。由于可能存在多个Stash的内容,所以用栈来管理,pop会从最近的一个stash中读取内容并恢复。
- git stash list: 显示Git栈内的所有备份,可以利用这个列表来决定从那个地方恢复。
- git stash clear: 清空Git栈。此时使用gitg等图形化工具会发现,原来stash的哪些节点都消失了。
放弃本地修改,直接覆盖之
git reset --hard
git pull
git status .
git pull
// 出现该提示 Please, commit your changes or stash them before you can merge.
git stash
git pull
git stash pop
git status .
git add .
git commit -m ""
git push
解决冲突
中央仓库代表了正式项目,所以提交历史应该被尊重且是稳定不变的。
如果开发者本地的提交历史和中央仓库有分歧,Git 会拒绝 push 提交否则会覆盖已经在中央库的正式提交。
在开发者提交自己功能修改到中央库前,需要先 fetch 在中央库的新增提交,rebase 自己提交到中央库提交历史之上。
这样做的意思是在说,『我要把自己的修改加到别人已经完成的修改上。』最终的结果是一个完美的线性历史,就像以前的SVN 的工作流中一样。
如果本地修改和上游提交有冲突,Git 会暂停 rebase 过程,给你手动解决冲突的机会。
Git 解决合并冲突,用和生成提交一样的 git status 和 git add 命令,很一致方便。
还有一点,如果解决冲突时遇到麻烦,Git 可以很简单中止整个 rebase 操作,重来一次(或者让别人来帮助解决)