文章目录
系统的学习了Git简单操作,在这里做一些记录,方便之后的查阅
名字与邮箱
因为Git是分布式版本控制系统,所以,每个机器都必须自报家门:你的名字和Email地址。
$ git config --global user.name "Your Name"
$ git config --global user.email "email@example.com"
注意git config命令的–global参数,用了这个参数,表示你这台机器上所有的Git仓库都会使用这个配置,当然也可以对某个仓库指定不同的用户名和Email地址。
查询 名字与邮件
创建一个仓库
- 创建一个版本库非常简单,首先,选择一个合适的地方,创建一个空目录:
在命令行输入:
$ mkdir GitLearn
$ cd GitLearn
$ pwd
2. 通过git init命令把这个目录变成Git可以管理的仓库:
还未初始化,可以进入目录看看
输入命令行
$ git init
当前目录下多了一个.git的目录,这个目录是Git来跟踪管理版本库的,没事千万不要手动修改这个目录里面的文件,不然改乱了,就把Git仓库给破坏了。
上传文件
使用NotePad 编写一个Txt文件。选择NotePad 是因为window自带的有问题不好用,将编码格式选择UTF-8 BOM
文本内容:
Git is a version control system.
Git is free software.
输入命令行
git add readme.txt
git commit -m "第一个上传"
第一步:添加
第二步:上传 -m 后面跟的是 说明 最好是每次都填写
执行上面的命令,没有任何显示,这就对了,Unix的哲学是“没有消息就是好消息”,说明添加成功。
可以多次添加不同文件,然后只进行一次的上传
查看状态
git status
git status命令可以让我们时刻掌握仓库当前的状态
git diff 文件名
git diff这个命令可以查看 文件是怎么修改的
status 查看仓库的当前状态,如果修改过的情况下 会提示修改了,diff 可以知道修改的内容是哪里。
版本回退
git log
git log命令显示从最近到最远的提交日志
如果嫌输出信息太多,看得眼花缭乱的,可以试试加上 –pretty=oneline 参数
git reset --hard HEAD^
可以将版本回退至上一个版本
git reset --hard 版本ID
可以跳到指定版本
git reflog
要重返未来,用git reflog查看命令历史,以便确定要回到未来的哪个版本。
找到历史中 你想要回退的版本号
可以自己进行操作 查看文件中内容的变化,操作下吧
Git管理修改
Git跟踪并管理的是修改,而非文件
例如以下流程:
第一次修改 -> git add -> 第二次修改 -> git commit
Git管理的是修改,当你用git add命令后,在工作区的第一次修改被放入暂存区,准备提交,但是,在工作区的第二次修改并没有放入暂存区,所以,git commit只负责把暂存区的修改提交了,也就是第一次的修改被提交了,第二次的修改不会被提交。
删除文件与撤销修改
删除文件
git rm 文件名
撤销删除或者返回修改之前
git checkout 文件名
删除版本库需要执行 删除文件 操作 在提交
关联远程库GitHub
- github 创建一个账号 创建仓库
- 检查用户主目录 .user 下是否有 .ssh目录,里面有id_rsa和id_rsa.pub两个文件,这两个就是SSH Key的秘钥对,id_rsa是私钥,不能泄露出去,id_rsa.pub是公钥,可以放心地告诉任何人。
- 登陆GitHub,打开“Account settings”,“SSH Keys”页面:点“Add SSH Key”,填上任意Title,在Key文本框里粘贴id_rsa.pub文件的内容
- 要关联一个远程库,使用命令git remote add origin git@server-name:path/repo-name.git;
- 关联后,使用命令git push -u origin master第一次推送master分支的所有内容;
- 此后,每次本地提交后,只要有必要,就可以使用命令git push origin master推送最新修改
为什么GitHub需要SSH Key呢?因为GitHub需要识别出你推送的提交确实是你推送的,而不是别人冒充的,而Git支持SSH协议,所以,GitHub只要知道了你的公钥,就可以确认只有你自己才能推送。
从远程库克隆
要克隆一个仓库,首先必须知道仓库的地址,然后使用git clone命令克隆。
$ git clone git@github.com:WhatHappenedChuanWei/gitskills.git
创建分支
$ git checkout -b dev
Switched to a new branch 'dev'
相当于
$ git branch dev //创建
$ git checkout dev //切换
查看分支
git branch
会显示所有分支,当前分支前面有 * 号
git checkout 分支名称
分支切换
git merge 分支
一般是在主分支执行此操作,将分支合并到主分支
git branch -d dev
合并完成 删除分支
Git鼓励大量使用分支:
查看分支:git branch
创建分支:git branch
切换分支:git checkout
创建+切换分支:git checkout -b
合并某分支到当前分支:git merge
删除分支:git branch -d
解决冲突
两个分支提交
需要手动修改
Git用<<<<<<<,=======,>>>>>>>标记出不同分支的内容
修改后 add commit.
分支管理策略
通常,合并分支时,如果可能,Git会用Fast forward模式,但这种模式下,删除分支后,会丢掉分支信息。
如果要强制禁用Fast forward模式,Git就会在merge时生成一个新的commit,这样,从分支历史上就可以看出分支信息。
$ git merge --no-ff -m "merge with no-ff" dev
合并后
$ git log --graph --pretty=oneline --abbrev-commit
* e1e9c68 (HEAD -> master) merge with no-ff
|\
| * f52c633 (dev) add merge
|/
* cf810e4 conflict fixed
在实际开发中,我们应该按照几个基本原则进行分支管理:
首先,master分支应该是非常稳定的,也就是仅用来发布新版本,平时不能在上面干活;
那在哪干活呢?干活都在dev分支上,也就是说,dev分支是不稳定的,到某个时候,比如1.0版本发布时,再把dev分支合并到master上,在master分支发布1.0版本;
你和你的小伙伴们每个人都在dev分支上干活,每个人都有自己的分支,时不时地往dev分支上合并就可以了。
所以,团队合作的分支看起来就像这样:
后续补充: