Git 学习笔记
GIT 是一款免费的、开源的、分布式的版本控制系统。每一个 GIT 克隆都是一个完整的文件库,含有全部历史记录和修订追踪能力。其最大特色就是“分支”及“合并”操作快速、简便。支持离线工作,GIT 是整个项目范围的原子提交,而且 GIT 中的每个工作树都包含一个具有完整项目历史的仓库。
Git 安装
https://git-scm.com/download/
如果你不想安装,可以访问 http://www.hubwiz.com/course/55d301543ad79a1b05dcc4e2/ 这个链接直接练习。
查看 Git 版本
git --version
创建一个新的 Git 仓库
创建新文件夹,打开,然后执行 git init
命令用来创建一个新的 git 仓库,git 大部分命令都是在 git 仓库下运行
1 | git init # 将当前目录转换为 git 仓库 |
git init 和 git init –bare 的区别?
Git 的目录结构
1 | HEAD # 指向 Git 项目当前分支的头指针 |
所有的分支指针保存在 .git/refs/heads 目录下,HEAD 在 .git/HEAD 目录下,标签在 .git/refs/tags 目录下。
忽略不必要的文件/敏感信息
在 Git 工作区的根目录下创建一个特殊的 .gitignore
文件,然后把要忽略的文件名填进去,Git 就会自动忽略这些文件。
1 | # 配置语法 |
Git 工作流
你的本地仓库由 git 维护的三棵“树”组成。第一个是你的工作目录,它持有实际文件;第二个是暂存区(Index),它像个缓存区域,临时保存你的改动;最后是 HEAD,它指向你最后一次提交的结果。
Git 配置
git config
命令用来配置本地安装的 git
Git的设置文件为 .gitconfig
它可以在用户主目录下(全局配置),也可以在项目目录下(项目配置)。
1 | cat ~/.gitconfig # 查看当前本地配置 |
添加和提交
git add
你可以提出更改(把它们添加到暂存区)git commit
命令用来将本地修改添加到本地仓库历史,你的改动已经提交到了 HEAD,但是还没到你的远端仓库。
1 | git add [file1] [file2] # 添加指定文件到暂存区 |
删除文件/改名文件
1 | git rm [file1] [file2] ... # 删除工作区文件,并且将这次删除放入暂存区 |
清除没有在 Git 库中的文件
1 | git clean -nd # 查看当前多的文件和目录或将要被删除的文件和目录 |
查看信息
git log
查看历史记录
git 一直停留在 log 模式,这时只需要按 q 键即可退出。如果不退出,在按完 q 键后回车即可。
1 | git status # 显示有变更的文件 |
修正错误的 commit
git reset
命令用来撤销历史中的某次提交,也会撤销其后面的提交历史
1 | git reset [file] # 重置暂存区的指定文件,与上一次commit保持一致,但工作区不变 |
Git 分支理解与应用
分支是用来将特性开发绝缘开来的。在你创建仓库的时候,master 是“默认的”分支。在其他分支上进行开发,完成后再将它们合并到主分支上。
1 | git checkout -b dev(分支名) # 创建分支并切换过去,-b 参数表示创建并切换,相当于 git branch dev , git checkout dev |
处理合并冲突 Git merge conflict
git diff [fileName]
查看区别
编辑查看文件,git 已为我们做好标记区别, 删除你不要的部分并保存,git add [fileName]
代码合并:Merge、Rebase 的选择
git rebase 和 git merge 做的事其实是一样的。它们都被设计来将一个分支的更改并入另一个分支,只不过方式有些不同。
查看详细
Git 基础 - 打标签
标签可以针对某一时间点的版本做标记,常用于版本发布。
https://git-scm.com/book/zh/v1/Git-%E5%9F%BA%E7%A1%80-%E6%89%93%E6%A0%87%E7%AD%BE
1 | git tag # 列显已有的标签 |
Git stash 改善工作流
备份当前的工作区的内容,从最近的一次提交中读取相关内容,让工作区保证和上次提交的内容一致。同时,将当前的工作区内容保存到 Git 栈中。
查看廖雪峰 git 教程详情
1 | git stash save "message..." # 这条命令实际上是 git stash 命令的完整版。git 会基于当前的提交信息自动创建评论。如果你更希望有自定义信息的话(因为它可能和前一个提交没有任何联系) |
Git 远程同步
1 | git fetch [remote] # 下载远程仓库的所有变动 |
假设现在想增加 3 个远程库地址
1 | https://git.oschina.net/****/*.git |
首先,先增加第一个地址 git remote add origin <url1>
然后增加第二个地址 git remote set-url --add origin <url2>
增加第三个地址 git remote set-url --add origin <url3>
⋯ 依次类推
这样就完成了添加多个地址到 origin 库中了,
以后只要使用 git push origin master
就可以一次性 push 到 3 个库里面了(使用 git push
也可)
生成一个可供发布的压缩包
git archive
Github 贡献代码工作流
- 先
Fork
到自己的项目保持同步 Clone
到本地,如果项目有依赖包,还要安装依赖包- 进入本地项目目录,upstream 是你取的别名
git remote add upstream [原作者项目url]
- 保持同步fetch(‘拿来、取来’)
git fetch upstream
,git checkout master
,git merge upstream/master
,git push origin master
;或者git pull upstream master
- 创建分支
git checkout -b [dev-rebase]
- 修改添加代码
git status
,git add.
,git commit -m '...'
- 写了 3 天多后考虑到那边可能更新了代码,执行
git checkout master
- 同步
git pull upstream master
git checkout [dev-rebase]
git rebase master
- 推送
git push origin [dev-rebase]
Github 实用小技巧
- 查看每日最新资讯
https://github.com/trending/php
- github 根据你 following 定期给你发一封邮件
https://github.com/explore/subscribe
- 进入到别人的项目中按快捷键
t
进行模糊搜索 s
定位到搜索框gi
=> issuesgp
=> pulls
学习参考
https://kingofamani.gitbooks.io/git-teach/content/chapter_2/git_q_and_a.html
http://www.ruanyifeng.com/blog/2015/12/git-cheat-sheet.html
http://rogerdudler.github.io/git-guide/index.zh.html
https://www.atlassian.com/git/tutorials/setting-up-a-repository/&prev=search
http://backlogtool.com/git-guide/cn/intro/intro1_1.html
https://github.com/geeeeeeeeek/git-recipes/blob/master/wiki/catagory.md