1.目的:
- 学习版本控制
- 多人协作(协同开发)
版本控制系统(version control system简称VCS),是一种记录一个 或若干文件内容变化,以便将来查阅特定版本修订情况的系统。
你可以把它想象成一个文件时光机,有了它你就可以将某个文件回溯到之前的状态,甚至将整个项 目都回退到过去某个时间点的状态;你可以比较文件的变化细节,查出是谁的修改在哪里引入了问 题代码,即便你不小心错删了一些文件也能够通过它很方便的找回。仓库 (Repositry)
收藏 (Star)
复制克隆项目(Fork)
发送请求(Pull Request)
关注(Watch)
事务卡片(Issue)
- git 版本历程
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
git 和 github 的区别
git :是一种抽象的,相当于一种协议,(钱)
github : 相当于是对git 的一种实现 (人民币)
这篇文章记录个人常用的一些命令,和记不住的一些命令。
2.安装
在 Windows 上安装 Git 同样轻松,有个叫做 msysGit 的项目提供了安装包:
http://msysgit.github.io/
完成安装之后,就可以使用命令行的 git 工具(已经自带了 ssh 客户端)了,另外还有一个图形界面的 Git 项目管理工具。
3.配置
- 首先是配置帐号信息
git config --global user.name zhuqiang
git config --global user.email 1781672547@qq.com
git config --list //查看配置的信息
git help config //获取帮助信息
配置密钥
ssh-keygen -t rsa -C zhuqiang9707@163.com //生成密钥
ssh -T git@github.com //测试是否成功
配置别名,git的命令没有自动完成功能,有点坑哈,别名派上了用场
git config --global alias.st status //git st
git config --global alias.co checkout //git co
git config --global alias.br branch //git br
git config --global alias.ci commit //git ci
笔者一般只配置配置这几个,你也可以配置其他命令。
4.新建仓库
-
初始化
git init //初始化 git status //获取状态
-
添加到暂存区
git add [file1] [file2] ... //.或*代表全部添加
-
提交版本(提交到本地)
git commit -m "message" //此处注意乱码 这里的message 的对版本的介绍 "init html css" 初始化html css
-
提交到远程仓库
git remote add origin git@github.com:yanhaijing/test.git //添加源
git push -u origin master //push同事设置默认跟踪分支
//origin 源项目的地址
//master 分支
5.从现有仓库克隆
git clone git://github.com/yanhaijing/data.js.git
git clone git://github.com/schacon/grit.git mypro //克隆到自定义文件夹
6. 本地
1.添加到暂存区
git add * // 跟踪新文件
git add -u [path] // 添加[指定路径下]已跟踪文件
# 逐个添加文件
git add filename
# 添加当前目录中的所有文件
git add -A
# 添加当前目录中的所有文件更改
git add .
# 选择要添加的更改(你可以 Y 或 N 完成所有更改)
git add -p
2.版本的切换
//通过 git reflog 查看到的版本id
git reset HEAD //取消已经暂存的文件
git reset --mixed HEAD //同上
git reset --soft HEAD //重置到指定状态,不会修改索引区和工作树
git reset --hard HEAD //重置到指定状态,会修改索引区和工作树
git reset -- files //重置index区文件
git reset HEAD^ //添加^ 向前回滚一个版本
// 切换回3或5次提交
git reset HEAD~3
git reset HEAD~5 -- filename # for a specific file
4.文件提交
我们可以使用 git commit -m '提交信息'
来将文件提交到 Git。对于提交简短消息来说,这一切都很好,但是如果你想做一些更精细的事情,你需要来学习更多的操作:
// 提交暂存文件,通常用于较短的提交消息
git commit -m 'commit message'
// 添加文件并提交一次
git commit filename -m 'commit message'
// 添加文件并提交暂存文件
git commit -am 'insert commit message'
// 更改你的最新提交消息
git commit --amend 'new commit message'
git commit -a // 跳过使用暂存区域,把所有已经跟踪过的文件暂存起来一并提交
git commit -v // 提交时显示所有diff信息
5.撤销操作
git revert HEAD //撤销前一次操作
git revert HEAD~ //撤销前前一次操作
git revert commit // 撤销指定操作
6.查看差异
git diff file //查看指定文件的差异
git diff --stat //查看简单的diff结果
git diff //比较Worktree和Index之间的差异
git diff --cached //比较Index和HEAD之间的差异
git diff HEAD //比较Worktree和HEAD之间的差异
git diff branch //比较Worktree和branch之间的差异
git diff branch1 branch2 //比较两次分支之间的差异
git diff commit commit //比较两次提交之间的差异
7.查看日志
git log //查看最近的提交日志
git log --pretty=oneline //单行显示提交日志
git log --graph // 图形化显示
git log --abbrev-commit // 显示log id的缩写
git log -num //显示第几条log(倒数)
git log --stat // 显示commit历史,以及每次commit发生变更的文件
git log --follow [file] // 显示某个文件的版本历史,包括文件改名
git log -p [file] // 显示指定文件相关的每一次diff
7.分支
1.列出分支
git branch //列出本地分支
git branch -r //列出远端分支
git branch -a //查看存储库的所有当前分支,包括本地和远程分支。
git branch -v //查看各个分支最后一个提交对象的信息
git branch --merge //查看已经合并到当前分支的分支
git branch --no-merge //查看为合并到当前分支的分支
git branch --set-upstream dev origin/dev //将本地dev分支与远程dev分支之间建立链接
2.创建分支
git branch test //新建test分支
git branch branch [branch|commit|tag] // 从指定位置出新建分支
git branch --track branch remote-branch // 新建一个分支,与指定的远程分支建立追踪关系
3.重命名分支
git branch -m old new //重命名分支
4.删除分支
git branch -d test //删除test分支
git branch -D test //强制删除test分支
//删除远程分支
git push origin --delete 分支名
5.切换分支
git checkout test //切换到test分支
git checkout -b test //新建+切换到test分支
git checkout -b test dev //基于dev新建test分支,并切换
6.合并分支
git merge test //将test分支合并到当前分支
git merge --squash test // 合并压缩,将test上的commit压缩为一条
git cherry-pick commit //拣选合并,将commit合并到当前分支
git cherry-pick -n commit //拣选多个提交,合并完后可以继续拣选下一个提交
git rebase master //将master分之上超前的提交,变基到当前分支
git rebase --onto master 169a6 //限制回滚范围,rebase当前分支从169a6以后的提交
git rebase --interactive //交互模式
git rebase --continue // 处理完冲突继续合并
git rebase --skip // 跳过
git rebase --abort // 取消合并
7.备份分支
// 将新的本地分支作为备份
git push -u origin branch_2
8.从分支上下载
git clone -b 远程分支名称 https://GitHub.com/username/xxx.git
8.远端
1. 合并分支
git merge origin/branch //合并远端上指定分支
2.拉去分支
git fetch origin remotebranch[:localbranch] // 从远端拉去分支[到本地指定分支]
git pull origin dev(所要拉取仓库,一般不是master正式,采用dev为佳)
git pull origin remotebranch:localbranch // 拉去远端分支到本地分支
3.添加分支到远程仓库
git push origin branch //将当前分支,推送到远端上指定分支
git push origin localbranch:remotebranch //推送本地指定分支,到远端上指定分支
4.删除远程的仓库的分支
git push origin :分支名 //删除远端指定分支
git push origin 分支名 --delete //删除远程分支
git branch -dr branch // 删除本地和远程分支
git checkout -b [--track] test origin/dev //基于远端dev分支,新建本地test分支[同时设置跟踪]
源
git是一个分布式代码管理工具,所以可以支持多个仓库,在git里,服务器上的仓库在本地称之为remote。
个人开发时,多源用的可能不多,但多源其实非常有用。
git remote add origin1 git@github.com:yanhaijing/data.js.git
git remote //显示全部源
git remote -v //显示全部源+详细信息
git remote rename origin1 origin2 //重命名
git remote rm origin //删除
git remote show origin //查看指定源的全部信息
标签
当开发到一定阶段时,给程序打标签是非常棒的功能。
git tag //列出现有标签
git tag v0.1 [branch|commit] // [从指定位置]新建标签
git tag -a v0.1 -m 'my version 1.4' //新建带注释标签
git checkout tagname //切换到标签
git push origin v1.5 //推送分支到源上
git push origin --tags //一次性推送所有分支
git tag -d v0.1 //删除标签
git push origin :refs/tags/v0.1 //删除远程标签
总结
啊哈!终于总结完了,以后不会的时候,再也不用到处去找了。
其实还有两个最有用的命令还未提到。
git help * //获取命令的帮助信息
git status //获取当前的状态,非常有用,因为git会提示接下来的能做的操作
最后再补一个救命的命令吧,如果你不小心删错了东西,就用下面的命令,可以看到你之前操作的id,大部分情况下是可以恢复的,记住git几乎不会删除东西。
git reflog // 显示最近操作的commit id
看谁写了什么
### 显示带有作者姓名的文件的更改历史记录
git blame 'filename'
### 显示带有作者姓名和 git commit ID 的文件的更改历史记录
git blame 'filename' -l
多人协作开发
-
一个人的账号作为公共的仓库 (admin 管理)
-
admin 创建一个项目,并在项目中的settings 中添加协作开发者
-
协同开发者(me) 收到 admin 的邮件邀请,并同意邀请
-
这样me 的项目主页中会多出 协作开发的项目,将项目克隆到本地
-
在本地库中的操作
git clone XXX //创建分支 git branch dev // 创建dev 分支 //切换分支 git checkout test //切换到test分支 //创建并切换分支 git checkout -b test //新建+切换到test分支 //添加到暂存区 git add . git commit -m "html" git push -u origin dev