目录
Git是什么
版本控制工具。至于git和其他版本控制项目有什么优势,网上有很多资料可以参考,此处不再赘述。
下载地址
git客户端安装
这里只截取了重要的步骤。双击下载的.exe文件即可运行。
1.鼠标快捷菜单
2.运行说明
3.换行符转换
常用git命令
版本库
git分本地仓库,远程仓库,和镜像仓库。在本地又存在工作区和缓存区。
> 使用git add把文件从工作区上传到到缓存区,
> 使用git commit把文件从缓存区上传到本地仓库,
> 使用git push把文件从本地仓库上传到远程仓库。这里先有个概念。
初始化本地仓库
git init
执行完成后在当前文件夹下回出现.git的隐藏文件夹。.git文件夹下的内容不能随便修改。
设置签名
设置签名是为了区分不同开发人员的身份。
形式:
用户名:***
Email地址:***@***.com
命令:
项目级别/仓库级别:尽在当前本地库范围有效
git config user.name 用户名
git config user.email ***@***.com
信息保存位置:./git/config
系统用户级别:登录当前操作系统的用户范围
git config –-global user.name 用户名
git config –-global user.email ***@***.com
信息保存位置:当前系统家目录/.gitconfig
优先级:就近原则,项目级别优先级高于系统用户级别
原则:二者存其一,不能全部没有。
查看状态
git status 查看状态。
vim good.txt
git status
添加到缓存区
git add
git add good
good文件添加到暂存区。
执行执行git add后,再查看状态如下
从缓存区移除
git rm --cached
git rm –cached good
good文件从暂存区移除。
git status 查看执行后状态
从暂存区提交到本地仓库
git commit 从缓存区提交到本地仓库
添加提交备注,直接使用vi编辑器编辑后保存。
再次查看状态。
修改good文件后查看状态。
添加备注提交
git commit –m "注备"
git commit –m “my second commit” good 带注备的提交good文件
上次提交补充
git commit --amend
补充上次提交。
先查看当前暂存区状态,是clean状态,修改apple.txt并提交。
查看当前提交日志。
此时如果发现apple.txt文件漏提交内容,修改内容并使用amend方式提交。
查看提交日志
git log 查看提交日志
git log --pretty = oneline
git log --oneline。只能显示当前和当前之前的版本,无法显示当前版本之后的版本。
git reflog
版本回退/前进
git reset
git reset --hard [索引值]。表示前进或后退到某个版本。
git reflog
git reset --hard c8a8029
Vi good
git reset --hard ab2589f
git reset –hard HEAD^
从当前版本往后后退一个版本。^可并列使用,多少个^符号表示回退多少个版本。
git reset –hard HEAD~n。表示向后回退n个版本,n为数字。
reset命令的三个参数比较:
soft
仅仅在本地库移动HEAD指针。
说明:如下图所示,执行rest –soft命令后,good文件在缓存区以及本地区还保持上一个版本的状态,但是本地库的指针已经变动,所以查看status时,good的状态为修改并暂存。
mixed
在本地库移动HEAD指针
重置缓存区
说明:如下图所示,执行rest --mixed命令后,good文件在本地区还保持不变,但是本地库的指针已经变动,并且暂存区也被重置,所以查看status时,good的状态为修改但没有暂存,是红色的modified。
hard
在本地库移动HEAD指针
重置缓存区
重置工作区
命令帮助
git help 查看命令帮助
git help config 打开浏览器查看config命令帮助
git add –h 中断查看add命令帮助
删除文件找回
Vi aaa.txt
Git add aaa.txt
Git commit –m “new aaa.txt” aaa.txt
Rm aaa.txt
Git status
git add aaa.txt
git commit –m “delete aaa.txt” aaa.txt
git status
Git reflog
Git reset --hard a5d164e
也可以用git reset –hard HEAD方式找回。
比较
git diff
提交apple.txt
git add apple.txt
git commit –m “commit apple.txt” apple.txt
修改apple.txt
比较本地和暂存区
把apple.txt提交到暂存区后再进行比较。
Git add apple.txt
Git diff apple.txt
比较本地某个版本:
Git diff HEAD apple.txt
比较本地某个版本:Git diff ab2589f apple.txt
比较所有文件
Git diff [version]
Diff后面无文件名,默认比较所有文件
分支
查看分支
git branch –v
创建分支
Git branch hot_fix
创建名称叫hot_fix的分支。
再次查看分支情况
切换分支
Git checkout hot_fix
在hot_fix分支修改apple.txt并提交,查看分支情况。
当hot_fix刚刚创建的时候,两个分支的当前版本是一致的,见上图。
切换分支
切换到接受修改的分支(被合并的分支)
执行merge:如 git merge hot_fix
Merge遇到冲突
在两个分支修改apple.txt的同一行并提交。
Vi apple.txt
保留master分支上的修改。
查看此时状态。
把apple.txt加入到缓存区,再查看状态。
使用git commit提交,注意这里的commit后面不能带文件名。
远程库地址别名
git remote –v
git remote add origin https://github.com/jolan80l/huashan.git
git remote –v
push
git push origin master
远程库下载到本地
git clone
git clone https://github.com/jolan80l/huashan.git
完整的把远程库下载到本地
创建origin远程地址别名
初始化本地库
邀请成员加入团队github
复制邀请的连接给相应的成员,成员打开连接。点击接受邀请即可。这里没有多个账号,不模拟截图了。
Pull
pull=fetch+merge
这里只有一个账号,无法模拟团队合作的情况,在此说明学习时候的例子。
账号A:yuebuqun
账号B:linghuchong
A创建huashanjianfa.txt,输入“华山剑法天下第一!”。
B拉取了huashanjianfa.txt文件,在里面添加了一行“我会独孤九剑!”。
A账户执行fetch操作,查看huashanjianfa.txt文件,并没有变化。
Git fetch origin master
A切换分支到远程master,再查看文件,可以看到如下内容。
git checkout origin master
vi huashajianfa.txt
文件内容:华山剑法天下第一!我会独孤九剑!
A切换回本地master分支,分别执行以下操作。
git checkout master
vi huashajianfa.txt
文件内容:华山剑法天下第一!
git merge origin/master
vi huashajianfa.txt
文件内容:华山剑法天下第一!我会独孤九剑!
解决冲突
要点
如果不是基于github远程库最新版所做的修改,不能推送,必须先拉去。
拉去下来后如果进入冲突状态,则按照“分支冲突解决”操作即可。
类比
老王和老王媳妇相当于两个账户。
债权人:老王
债务人:小刘——相当于github
老王说:10天后归还。小刘接受,双发达成一致。
老王媳妇说:5天后归还。小刘不能接受。老王媳妇需要找到老王确认后再执行。
跨团队协作
Fork
复制地址,发送给远程团队。
远程团队使用其github账号登陆,浏览器输入接受的地址。
点击fork
东方不败的本地操作:
Git clone xxx
Cd huashan
Vi huashanjianfa.txt,增加一行“这是葵花宝典”,保存并退出
Git add huashanjianfa.txt
Git commit –m “葵花宝典修炼法门” huashanjianfa.txt
Git push origin master
Pull request
岳不群的操作:
使用github账号登陆,点击pull requests
岳不群可以输入提问在最下面的对话框,点击comment即可。另一方面东方不败也可以使用同样的方式回复。实现了对话的效果。
在pull requests的标签页下面,有commits和files changed两个选项卡,前者可以查看提交的文件,后者可以查看文件变化。
点击merge pull request即可合并代码。
本地使用pull拉取最新变更,可查看huashanjianfa.txt的变化,即东方不败的提交。
SSH免密登录
cd 家目录
ssh-keygen –t rsa –C 邮箱, 一路回车
cd .ssh
复制id_rsa.pub到github上
新建别名:git remote add origin_ssh github的ssh地址
git push origin_ssh master