
一些有用的链接:
https://www.git-scm.com/
http://nvie.com/posts/a-successful-git-branching-model/
Git开发模式:
建议至少有一个master和develop分支。master只做版本维护工作,develop用于开发。开发完成且测试通过后合并到master。
常用场景:
- 撤销提交到Remote的commit或者本地回滚
强制方式:
如果你推送到remote的commit没有被其他人pull过,那么你可以使用
git reset --hard <commit-hash>
git push -f origin master (假定本地和远程都是对master进行操作)
来撤销之前提交的commit。
兼容方式(推荐使用):
但是如果有其他人同步过你的push,那么使用强制的方式会给他人带来问题。
你可以在本地使用revert来还原你提交的commit,然后生成一个新的commit然后再推送到远端。具体如下:
假设当前状态如下:
回滚前状态
我们希望将fb43619的commit回滚,则可以使用:
git revert HEAD~1 (HEAD~1表示HEAD的前一个commit,依此类推) 或者 git revert fb43619
这样我们将得到没有该commit的状态。然后我们可以继续在此基础上进行编辑提交,最后push到Remote。
本地回滚后状态(尚未push到Remote)
值得一提的是,6bb916commit的内容不会被回滚,即revert操作只会针对一个commit有效。
如果我们不需要这次回滚,可以:
git revert HEAD 或者 git revert a58f231
得到如下结果:
回滚push到远程后并撤销本地回滚后状态(撤销本地回滚尚未push到Remote)
经过回滚、撤销回滚后,我们回到最开始状态:
撤销回滚后状态
但是,我们可以发现log中增加了两次回滚的操作记录。
- 删除Remote上不需要的分支
git push origin :<delete branch>
- 本地回滚
主要的命令:git revert和git reset
git revert 是生成一个新的提交来撤销某次提交,此次提交之前的commit都会被保留,revert操作本身也会被记录。
git reset 是回到某次提交,提交及之前的commit都会被保留,但是此次之后的修改都会被退回到暂存区(视情况而定)。该操作本身不会被记录。
--soft 只有commit被回滚,index及内容不变
--mixed commit和index都被回滚,内容不变
--hard commit和index都被回滚,内容被重置,之后的内容无法找回
注:git reset可以用于合并多个commit记录。
可能的问题:
- git status/add中文乱码
情景:
使用git add添加文件或者使用git status查看状态时,中文文件名会显示形如274\232\350\256\256\346\200\273\347\273\223.png 的乱码
解决方案:
git config --global core.quotepath false
参考链接:http://zengrong.net/post/1249.htm
- Adding a new SSH key to the ssh-agent
参考链接:https://help.github.com/articles/adding-a-new-ssh-key-to-the-ssh-agent