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
    1. cd ~
    2. vi .git-credentials
    3. https://用户名:密码@github.com  如 https://zzz:zzz123@github.com
    4. 执行: git config --global credential.helper store
    5. cat  ~/.gitconfig 看到 [credential]  helper = store 就行啦
 
7.自建git项目
  1. codingnet 创建
  2. codingnet 初始提醒如何初始代码
  3. 分配成员
  4. 其他人git clone 就行
四、问与答: 
  1. You asked me to pull without telling me which branch you want to merge with.
    • answer: 原因:没有本地和远程分支建立连接关系
    • 解决:git pull origin test 
  2. 本地 和 远程服务器 git branch -a 发现git  远程git分支不统一
    • 原因:git pull 才会跟新最新的远程分支
    • 解决:git pull
  3. git clone 代码报400
    1. 原因:git 不知道你是谁啊?
    2. 解决:见 git 免输入用户名
  4. git clone pk   git pull
    • 区别
      • git  clone : 从远程只下载初始的代码!不会获取版本信息,日志信息等!初始时使用。
      • git  pull   :  从远程下载代码,并且和本地代码进行合并! 会获取版本信息,日志信息等!
    • 注意:git  clone 后,需要git pull 才能玩!
  5. composer新增了文件,git status检测不到,.gitignore  也没有进行忽略。
    • 原因:可能引入的第三方包里带有.git文件,和现在的git 冲突。
    • 解决:
      • 删除这里的.git文件
      • git rm -r --cached .  清楚git 缓存,就可以看到了。
五、资料: 
 附:优秀资料: Git教程


posted @ 2018-03-08 17:41  邹忠  阅读(146)  评论(0编辑  收藏  举报