Git学习笔记

2017-07-19  本文已影响0人  sky_arony

楔子

如果入了程序员这一行,git应该是迟早都得弄明白的,对于初学者怎么理解这个东西呢。

用一个词概括就是“版本控制”。如果要学习的话廖雪峰前辈的教程非常不错,值得一看:git教程-廖雪峰,然后还有这个git简明指南

既然已经有如此优秀的教程,那本文的用意便在于对其中一些特别需要注意的点和使用频率特别高的命令记录下,方便以后快捷查看。

正文

初始化

状态查看

提交(每次提交都需要add和commit)

版本回退

撤销修改

git中版本管理分成三个区域:工作区、暂存区和分支


git版本管理

在这里引用一段关于解释这个三个区域关系的话:

1).从工作目录,提交到stage。
2).从stage提交到master。

从工作目录提交到stage,需要用add或者rm命令,只提交到stage,而没有提交到master,是不会自动同步到master的。

从stage提交到master用commit命令。

退回也是要分两步,一个是从master退回到stage,然后再从stage退回到工作目录。

对于还没有提交到stage的,可以从stage用checkout命令退回,这一步会取stage中的文件状态,覆盖掉工作目录中文件的状态,跟master完全没关系。

对于已经到达stage的,想把state中的文件状态用master中的覆盖掉,就用reset命令,这样就把stage中修改用master的状态覆盖掉了,完全跟工作目录没关系

针对这三个区域的撤销修改如下:

删除

远程仓库

远程仓库的用法一般是:一台服务器,多台客户机,每次开发时用git clone从服务器取到最新版本,开发结束后用git push上传到服务器

  1. 推送到远程git push
    远程库是空的时,第一次推送master分支时,加上了-u参数,Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令。
  1. 从远程克隆git clone
    Git支持多种协议,默认的git://使用ssh,但也可以使用https等其他协议。使用https除了速度慢以外,还有个最大的麻烦是每次推送都必须输入口令,但是在某些只开放http端口的公司内部就无法使用ssh协议而只能用https
    要克隆一个仓库,首先必须知道仓库的地址,然后使用git clone命令克隆。
    Git支持多种协议,包括https,但通过ssh支持的原生git协议速度最快。

分支管理

创建、合并和删除分支

git branch dev
git checkout dev

解决冲突

合并分支时,若分支之间存在冲突,那么就需要先解决冲突然后再进行合并

分支管理策略

实际开发时,我们应该遵循一定的开发策略,以便于进行管理和开发。

首先,master分支应该是非常稳定的,也就是仅用来发布新版本,平时不能在上面干活;
那在哪干活呢?干活都在dev分支上,也就是说,dev分支是不稳定的,到某个时候,比如1.0版本发布时,再把dev分支合并到master上,在master分支发布1.0版本;
你和你的小伙伴们每个人都在dev分支上干活,每个人都有自己的分支,时不时地往dev分支上合并就可以 了。

所以,团队合作的分支看起来就像这样:


git分支管理策略

合并分支时,加上--no-ff参数就可以用普通模式合并,合并后的历史有分支,能看出来曾经做过合并,而fast forward合并就看不出来曾经做过合并。

git merge --no-ff -m "merge with no-ff" dev

bug分支

一般修复bug会另外开一个专门的bug分支来进行修复,但是如果现在正在分支上进行工作,接到紧急任务需要修复一个bug就会出现一个冲突:工作区是被占用的。
此时可以用git stash命令来储存当前工作现场

feature分支

用来开发新的功能

多人协作

因此,多人协作的工作模式通常是这样:

首先,可以试图用git push origin branch-name推送自己的修改;

如果推送失败,则因为远程分支比你的本地更新,需要先用git pull试图合并;

如果合并有冲突,则解决冲突,并在本地提交;

没有冲突或者解决掉冲突后,再用git push origin branch-name推送就能成功!

如果git pull提示“no tracking information”,则说明本地分支和远程分支的链接关系没有创建,用命令git branch --set-upstream branch-name origin/branch-name

这就是多人协作的工作模式,一旦熟悉了,就非常简单。

标签管理

在git中,标签用于方便人的记忆,和某个commit绑定在一起,就像版本号(V1.0)一样,切换到分支后即可打标签

自定义git

git config --global color.ui true让git命令行显示颜色

文件忽略

.gitignore文件中写需要忽略的文件,然后提交上去

格式如下:

# Windows:
Thumbs.db
ehthumbs.db
Desktop.ini

# Python:
*.py[cod]
*.so
*.egg
*.egg-info
dist
build

# My configurations:
db.ini
deploy_key_rsa

配置别名

--global参数加上时表示全局,对本电脑下所有git仓库都有用,不加则只对当前仓库起作用

git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"`

总结

至此git整理完毕,主要取材取git教程-廖雪峰,主要用于方便自己查阅。

上一篇下一篇

猜你喜欢

热点阅读