git
一、git是什么?
git是目前世界上最先进的分布式版本控制系统; git跟踪并管理的是修改,不是文件
二、集中式pk分布式:
1.集中式
- 原理:版本库是集中存放在中央服务器的,而干活的时候,用的都是自己的电脑,所以要先从中央服务器取得最新的版本,然后开始干活,干完活了,再把自己的活推送给中央服务器。中央服务器就好比是一个图书馆,你要改一本书,必须先从图书馆借出来,然后回到家自己改,改完了,再放回图书馆。
- 最大缺点:commit得联网
- 代表工具:svn
- 示意图:
2.分布式
- 原理:没有“中央服务器”,每个人的电脑上都是一个完整的版本库。只需要把自己修改的部分推送给对方即可!!
- 优点:commit不需要联网。
- 代表工具:git
- 示意图:
三、常用git操作:
1.常见git流程
- git clone *** (拉取master分支)
- git pull
- 新建并切换到新分支 git checkout -b ***
- 编写代码
- 查看状态:git status
- 查看不同:git diff
- 添加文件:git add ***
- 提交代码:git commit -m '注释'
- 推送代码:git push origin ***(git checkout -b *** )
2.自己zzz的分支要推到devel分支
- zzz是最新版本(系统会检查)(ps 和周刚赌 不需要git pull 会拉代码,输掉了一顿椰汁鸡)
-
- git checkout devel
- git pull (拉取最新的devel代码)
- git merge zzz
- git push
- 到codingnet合并请求确认合并
- zzz不是最新版本
-
- git checkout devel
- git pull(拉取最新的devel代码)
- git merge zzz
-
会报:Automatic merge failed; fix conflicts and then commit the result.
- git status 查看冲突 解决冲突
- git commit -m ''
- git push
- 到codingnet合并请求确认合并
3.开发过程中穿插紧急需求
- git stash save "***" 暂存本地修改
- git pull 拉取远程最新代码
- 开发 ...直到上线
- git stash list 查看本地修改
- git stash pop stash@{0} 恢复暂存的修改
- git stash drop stash@{0} 确认没用了,删除stash。
4.log与对比
- 查看历史记录:git log
- 查看分支合并图 :git log --graph
- 某个文件提交历史:git log -p filename (-p 显示详情,不-p显示历史)
- 两个版本对比(最好借助codingnet这样的工具更直观)
-
- git diff head1 head2 文件详情
- git diff head1 head2 --stat 文件
- 查看 某个版本的文件 :git show 版本号:文件
5.回退
- 回退版本:git reset --hard HEAD~2 (1是上个版本,2是上上个.....)
- 我天,回退错了。回到对应版本: git reset --hard 3628164 (3628164 是某版本号前几位)
- 作死,又回退错了。git reflog 查看分支所有操作记录,走,又回去!
- 一键还原某个文件:git checkout
- 还原某个版本的文件 git checkout f73137c ***.php
- 拉取最新分支 :git reset --hard FETCH_HEAD
6.git 免输入用户名
- widows (--global 用于所有项目)
-
- git config --global user.name "XXXX"
- git config --global user.mail "XXXX@XXXX.com"
- linux
- cd ~
- vi .git-credentials
- https://用户名:密码@github.com 如 https://zzz:zzz123@github.com
- 执行: git config --global credential.helper store
- cat ~/.gitconfig 看到 [credential] helper = store 就行啦
7.自建git项目
- codingnet 创建
- codingnet 初始提醒如何初始代码
- 分配成员
- 其他人git clone 就行
四、问与答:
- You asked me to pull without telling me which branch you want to merge with.
- answer: 原因:没有本地和远程分支建立连接关系
- 解决:git pull origin test
- 本地 和 远程服务器 git branch -a 发现git 远程git分支不统一
- 原因:git pull 才会跟新最新的远程分支
- 解决:git pull
- git clone 代码报400
- 原因:git 不知道你是谁啊?
- 解决:见 git 免输入用户名
- git clone pk git pull
- 区别
-
- git clone : 从远程只下载初始的代码!不会获取版本信息,日志信息等!初始时使用。
- git pull : 从远程下载代码,并且和本地代码进行合并! 会获取版本信息,日志信息等!
- 注意:git clone 后,需要git pull 才能玩!
- composer新增了文件,git status检测不到,.gitignore 也没有进行忽略。
- 原因:可能引入的第三方包里带有.git文件,和现在的git 冲突。
- 解决:
- 删除这里的.git文件
- git rm -r --cached . 清楚git 缓存,就可以看到了。
五、资料:
附:优秀资料: Git教程
博客来源:git -- 邹振忠的博客