1.在机器上下载git
sudo yum install git
2.在自己的电脑上建立一个目录
mkdir learngit
cd learngit
pwd //显示当前目录路径
3.通过git init命令把当前目录变成Git可以管理的仓库
1.我们开始编写一个readme.txt文件
Git is a version control system.
Git is free software.
2.用命令git add告诉Git,把文件添加到仓库:
$ git add readme.txt
执行上面的命令,没有任何显示,这就对了,Unix的哲学是“没有消息就是好消息”,说明添加成功。
第二步,用命令git commit告诉Git,把文件提交到仓库:
$ git commit -m "wrote a readme file"
[master (root-commit) cb926e7] wrote a readme file
1 file changed, 2 insertions(+)
create mode 100644 readme.txt
当我们在库的文件被修改的时候
git status
命令可以让我们时刻掌握仓库当前的状态,上面的命令告诉我们,readme.txt被修改过了,但还没有准备提交的修改。
用 git diff
查看修改内容
被修改显示红色
不被修改显示
git log 回顾之前的版本
git log --pretty=oneline 经简化
git reset --hard HEAD^
返回上一次修改的内容
git reset --hard HEAD^^
返回倒数第二次修改的内容
git reset --hard HEAD~100
返回倒数第100次修改的内容
也可以根据commit 的版本号来切换
git reset --hard 4523211
Git提供了一个命令git reflog用来记录你的每一次命令:
第一步是用git add把文件添加进去,实际上就是把文件修改添加到暂存区;
第二步是用git commit提交更改,实际上就是把暂存区的所有内容提交到当前分支。
你可以发现,Git会告诉你,git checkout – file可以丢弃工作区的修改:
$ git checkout – readme.txt
命令git checkout – readme.txt意思就是,把readme.txt文件在工作区的修改全部撤销,这里有两种情况:
一种是readme.txt自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;
一种是readme.txt已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。
命令git reset HEAD file可以把暂存区的修改撤销掉(unstage),重新放回工作区:
场景1:当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令git checkout – file。
场景2:当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步,第一步用命令git reset HEAD file,就回到了场景1,第二步按场景1操作。
场景3:已经提交了不合适的修改到版本库时,想要撤销本次提交,参考版本回退一节,不过前提是没有推送到远程库。
mkdir *** 创建一个目录
git init 在指定目录内申明这个目录是我使用的库
vim readme.text 编写一个文件
git add readme.txt 将该文件存储到缓存区
git commit -m "This my first file " 将文件提交到本地库中 This my firsy file是提文件的名称
git status 查看我的仓库当前的状态
git diff 查看修改的状态
git diff ******* 查看该文件修改的内容
其中 使用git status 查看仓库当前状态的时候,红色文件表示修改了还没有提交到缓存区,绿色文件表示提交了并且已经提交到了缓存区 .当所有文件都提交完毕以后,使用git status 会显示无文件要提交,干净的工作区
使用 git diff 查看修改状态时如果返回空,则表示没有任何修改的内容,注意只要将修改后的文件提交到了缓存区,就不会查出修改内容
文件每上交一次,都会在库中存储一次记录,我们称他为版本日志,并且我们可以使用个git log 浏览这些版本,需要注意的是只要将文件上交到库中才会被记录,保存在缓存区的文件并不会被记录成版本日志,如果希望看到的是比较清晰的条目,可以输入git log --pretty=oneline
|
|
|
|
会出现
$ git log --pretty=oneline
3628164fb26d48395383f8f31179f24e0882e1e0 append GPL
ea34578d5496d7dd233c827ed32a8cd576c5ee85 add distributed
cb926e7ea50ad11b8f9e909c05226233bf755030 wrote a readme file
其中 append GPL 是提交的文件名字
3628164fb26d48395383f8f31179f24e0882e1e0 是commit id(版本号)是计算出来的 和SVN不一样
版本回退
git reset --hard HEAD^ 回退到上一个版本 HEAD表示当前命令
git reset --hard HEAD^^ 回退到上上一个版本
如果窗口没有关掉,想要回到调整最初的版本,可以
git reset --hard +版本号
git reflog 返回输出自己的每一条命令
插入小广告
修改自己的author 和email
> git config --global user.email "youremail@google.com" git config
> --global user.name "your name"
git checkout -- file 当你的文件修改之后并没有提交,可以使用该代码来撤销修改
一种是readme.txt自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;
一种是readme.txt已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。
当你将文件a提交到了库中以后,删除了自己电脑上的文件,这个时候你有两个选择
1.git rm filename 删除版本库中的文件
git commit -m "重新提交版本日日记" 重新提交版本日记
2.git checkout -- filename 恢复文件 (与版本库中的版本日记对比并且相匹配)
开始建立分布式版本库
1.回到主目录之下
$ ssh-keygen -t rsa -C "youremail@example.com"
会出现一个.ssh文件,文件中有id_rsa文件和id_rsa.pub文件,需要注意的是,id_rsa.pub是公共文件可以给别人看,但是id_rsa是私人文件,需要保密
2.cat id_rsa.pub文件,复制其中的内容放入github网站中的个人设置里面的ssh连接中
3.转到自己的github项目中,会有教程
克隆代码
在主目录下个git clone+一个地址就OK拉
创建与合并分支
git checkout -b dev 创建一个新的分支div并且切换当分支div
git checkout master 切换到master分支
git branch 列出所有分支
git merge 分支名 合并分支 用于合并指定分支到当前分支
合并方式:fast-forward 快进模式
删除分支:git branch -d 分支名
当两个分支都修改了同名文件的时候,合并的结果会发生冲突
这个时候 我们可以用 git status 来查看冲突的文件
这个时候我们可以直接打开该文件来查看和修改冲突文件的内容
Git用<<<<<<<,=======,>>>>>>>标记出不同分支的内容,我们修改如下后保存:
git log --graph命令可以看到分支合并图。
$ git merge --no-ff -m "merge with no-ff" dev
因为本次合并要创建一个新的commit,所以加上-m参数,把commit描述写进去。
分支策略
在实际开发中,我们应该按照几个基本原则进行分支管理:
首先,master分支应该是非常稳定的,也就是仅用来发布新版本,平时不能在上面干活;
那在哪干活呢?干活都在dev分支上,也就是说,dev分支是不稳定的,到某个时候,比如1.0版本发布时,再把dev分支合并到master上,在master分支发布1.0版本;
你和你的小伙伴们每个人都在dev分支上干活,每个人都有自己的分支,时不时地往dev分支上合并就可以了。
合并分支时,加上--no-ff参数就可以用普通模式合并,合并后的历史有分支,能看出来曾经做过合并,而fast forward合并就看不出来曾经做过合并。
临时工作缓存
git stash 缓存
切换到 master 主支进行工作结束yihou
切回到dev
git stash list 查看缓存内容
1.git stash apply恢复,但是恢复后,stash内容并不删除,你需要用git stash drop来删除;
2.git stash pop 恢复并删除
如果要丢弃一个没有被合并过的分支,可以通过git branch -D <name>强行删除。
多人协作
当你从远程仓库克隆时,实际上Git自动把本地的master分支和远程的master分支对应起来了,并且,远程仓库的默认名称是origin。
要查看远程库的信息,用git remote:
$ git remote
origin
或者,用git remote -v显示更详细的信息:
$ git remote -v
origin git@github.com:michaelliao/learngit.git (fetch)
origin git@github.com:michaelliao/learngit.git (push)
上面显示了可以抓取和推送的origin的地址。如果没有推送权限,就看不到push的地址。
添加标签
git tag ***
查看标签
git tag
给指定的commit id添加标签
git tag v0.9 5131565
查看标签具体信息
git show v0.9
备注标签信息
git -a v0.9 -m "-a指定标签,-m指定备注信息" 5156156
删除标签
git -d v0.9
推送标签到某个远程
git push origin v0.9
一次性推送所有标签
git push origiin --tags
如果标签已经推送到远程,则需要县删除本地
$ git tag -d v0.9
再删除远程
$ git push origin :refs/tags/v0.9