Git 文档

概念

branch 分支

  1. 一个分支意味着一个独立的、拥有自己历史信息的代码线(code line)。
  2. 你可以从已有的代码中生成一个新的分支,这个分支与剩余的分支完全独立。默认的分支往往是叫master
  3. 用户可以选择一个分支,选择一个分支叫做checkout.
  4. 如果你想开发一个新的产品功能,你可以建立一个分支,对这个分支的进行修改,而不至于会影响到主支上的代码。

Repository 仓库

  1. 一个仓库包括了所有的版本信息、所有的分支和标记信息.
  2. Git中仓库的每份拷贝都是完整的。仓库让你可以从中取得你的工作副本。

Commit 提交

  1. 提交代码后,仓库会创建一个新的版本。这个版本可以在后续被重新获得。
  2. 每次提交都包括作者和提交者,作者和提交者可以是不同的人

URL 路径

  1. URl用来标识一个仓库的位置

远程仓库

  1. 远端Git仓库和标准的Git仓库有如下差别:一个标准的Git仓库包括了源代码和历史信息记录。
  2. 我们可以直接在这个基础上修改代码,因为它已经包含了一个工作副本。
  3. 但是远端仓库没有包括工作副本,只包括了历史信息。可以使用–bare选项来创建一个这样的仓库。
  4. git clone --bare . ../zun/rete.git //克隆本地仓库到rete里

术语

  1. origin: 代码仓库源点
  2. master: 主分支
  3. branch: 主分支下的一个从分支
  4. deploy: 测试分支
  5. rebase: 很多人同时开发的时候,会有不同的分支线。rebase表示把别人版本比自己高的分支,合并到自己当前的分支中

操作指令

初始化

  1. # 初始化流程
  2. $ ssh-keygen -t rsa -C "your_email@youremail.com"
  3. 一路回车,看到yes/no 选择yes
  4. 把生成的id_rsa.pub文件的内容复制到网站的key
  5. # 测试连接
  6. $ ssh -T git@github.com
  7. # 设置本地的账号和邮箱
  8. $ git config --global user.name "your name"
  9. $ git config --global user.email "your_email@youremail.com"
  10. # 创建项目
  11. 1、网站上创建一个项目----然后(进入项目所在目录)
  12. $ git init //初始化下
  13. $ git remote add origin git@github.com:yourName/yourRepo.git //项目的地址
  14. touch README.md
  15. git init
  16. git add README.md
  17. git commit -m "first commit"
  18. git remote add origin git@github.com:cyndiWade/zun.git
  19. git push -u origin master

分支操作

  1. # 使用时配置全局名
  2. git config --global user.name "cyndiWade"
  3. git config --global user.emal "zhanglin492103904@qq.com"
  4. git config --list //获取配置文件信息
  5. cat ~/.gitconfig
  6. # 查看分支
  7. git remote -v
  8. # 添加仓库源
  9. git remote add origin git@git.corp.anjuke.com:aifang/aifang-branch
  10. # 添加源 branch 和 origin 源
  11. git remote add branch git@git.corp.anjuke.com:aifang/aifang-branch
  12. git remote add origin git@git.corp.anjuke.com:aifang/aifang-site
  13. # 选中
  14. git add .
  15. # 相当于 git add .; git commit; 。git commit -a无法把新增文件或文件夹加入进来
  16. git commit -a
  17. # 表示不提交某个修改文件
  18. git co filename.php
  19. # 获取分支
  20. # 其实pull命令完成了两个动作,首先从远端分支获取diff信息,第二个动作就是将改变合并到本地分支中。
  21. git pull
  22. # 从服务器合并最新的分支仓库到本地仓库
  23. git pull --rebase branch pmt-20352
  24. # 拉一个服务器分支到本地的分支中
  25. git fetch branch pmt-20352:pmt-20352
  26. # 新建分支时,要从服务器master主分支 到 到本地的online-fangjia-bug分支中
  27. git fetch origin master:online-fangjia-bug
  28. # 推送分支
  29. # 将本地仓库推送到远程服务器仓库
  30. git push
  31. # 提交到当前库到 源仓库的pmt-20352分支中
  32. git push origin pmt-20352
  33. # 把更改提交到 源仓库的主线分支中
  34. git push origin master
  35. # 把本地分支仓库,提交到服务器的某个分支仓库, 本地仓库:服务器分支仓库
  36. git push branch pmt-20352:pmt-20352
  37. # 把本地分支仓库,提交到服务器的某个分支仓库, 服务器分支仓库:本地仓库
  38. git pull branch pmt-20352:pmt-20352
  39. # 进入开发分支
  40. git checkout pmt-20352
  41. # 从服务器源仓库拉取主分支(线上仓库)
  42. git fetch origin master
  43. # 检测本地分支是否与线上分支冲突了,如果有冲突找人解决,没有冲突则可以上线了
  44. git rebase FETCH_HEAD
  45. # 横跨几个月的项目需要合并master的分支
  46. git pull --rebase origin master
  47. //小项目只需要
  48. git pull --rebase git-branch pmt-21146 //合并开发分支的项目
  49. # 解决冲突
  50. # 重新检测冲突
  51. git rebase --abort
  52. # 出现这个时
  53. CONFLICT (content): Merge conflict in app-web/page/taofang/Topic.phtml
  54. # vi这个冲突文件时,解决冲突
  55. git add app-web/page/taofang/Topic.phtml
  56. # 重新rebase,如果有冲突继续解决,每次解决都重复这条命令,直到解决未知
  57. [(no branch)] git rebase --continue
  58. # 然后在提交到一个新的分支上
  59. git push git-branch pmt-23423:pmt-23423-01
  60. # 如果中间遇到某个补丁不需要应用,可以用下面命令忽略:
  61. git rebase --skip
  62. # 回滚到某个版本
  63. git reset --hard 2e1b1db4c4de485a45aea29c9e72e339f5baeed1
  64. git reset 2e1b1db4c4de485a45aea29c9e72e339f5baeed1 (没有提交commit的状态)
  65. # 暂存
  66. git stash
  67. git stash pop 取出
  68. # 日志查看
  69. git reflog
  70. # 查看那些文件发生了改动。这个命令在git commit之前有效,
  71. git status
  72. # 查看某个分支历史记录
  73. git show master
  74. # 查看某个指纹的修改信息
  75. git show 81e01bf5d5f5c611f6528936d734f23359a43c66
  76. # 查看某个指纹的修改信息
  77. git log --graph
  78. # 查看以前的commit
  79. git log --oneline
  80. # 查看当前分支的父级历史记录
  81. git show HEAD^
  82. git show HEAD^^ 表示父级的父级
  83. # 双父级时的处理
  84. git show HEAD^1 //查看第一个父级
  85. git show HEAD^2 //查看第二个父级
  86. # 检测修改过的数据与现有.git仓库中的数据是否一致。这个命令只在git add之前使用有效。如果已经add了,那么此命令输出为空 。
  87. git diff
  88. # 这个命令在 git add 之后在 git commit 之前有效。
  89. git diff cached
  90. # 显示当前都有哪些分支,其中标注*为当前所在分支
  91. git branch
  92. # 创建一个试验分支,名称叫 experimen
  93. git branch experimental
  94. # 删除分支 (-d 表示在分支已经合并到主干后删除分支. -D 表示不论如何都删除分支)
  95. git branch -d experimental
  96. # 删除文件和目录
  97. git rm
  98. # 把文件从版本控制删除
  99. git rm -r --cached path
  100. # 版本回退
  101. git reset --hard HEAD
  102. # 切换分支
  103. git checkout master
  104. # 克隆仓库到本地上的kfs目录中
  105. git clone git@github.com:cyndiWade/zun.git
  106. # 比较master主分支与bobworks分支都做了些什么改变
  107. git whatchanged -p master:bobworks
  108. # 删除远程分支
  109. git push origin :pmt-cms-21395
  110. # 分支别名, 创建一个 V3 的分支
  111. git branch stable V3
  112. # 谁创建了或者是修改了这个文件
  113. git blame filename

tag 标签操作

  1. # tag 标签可以针对某一时间点的版本做标记,常用于版本发布
  2. # 列出标签
  3. git tag
  4. # 搜索符合模式的标签
  5. git tag -l 'v0.1.*'
  6. # 获取远程tag
  7. git fetch origin tag <tagname>
  8. # 创建本地 tag, tag 有两种类型, 轻量标签、附注标签,
  9. ## 轻量标签是指向提交对象的引用
  10. git tag v0.1.2-light
  11. ## 附注标签则是仓库中的一个独立对象, 建议使用附注标签
  12. git tag -a v0.1.2 -m "0.1.2版本"
  13. # 切换到标签,与切换分支命令相同
  14. git checkout -b [tagname]
  15. # 查看标签信息,标签的版本信息
  16. git show v0.1.2
  17. # 删除本地标签
  18. git tag -d v0.1.2
  19. # 删除远程 tag
  20. git push origin --delete tag
  21. # 给指定的 commit 打标签, git log 获取
  22. git tag -a v0.1.1 9fbc3d0
  23. # 标签发布
  24. # 将 v0.1.2 标签提交到 git 服务器
  25. git push origin v0.1.2