基础部分请参考前面的一篇文章:《Git常用命令以及相关资料》

Git与SVN的区别

  • git是分布式版本控制系统,SVN是集中式版本控制系统。详见:《集中式vs分布式》
  • git把内容按元数据方式存储,而SVN是按文件。
  • git版本库可以离线查看所有log,可以离线提交,而SVN不可以。
  • 更多区别详见: 《SVN与Git的区别》

操作流程

SVN

  1. update(将远程版本库代码更新到本地)
  2. commit(将本地代码提交到远程版本库)

git

  1. commit(将本地代码提交到远程版本库)
  2. fetch(将远程版本库的改动下载到本地(未合并))
  3. merge(合并两个分支(本地、远程))
  4. push(将最新的版本库同步到远程服务器)

显而易见:SVN的操作简单明了,git学习成本比SVN高一点。但是由于git是分布式的,所以不需要联网就可以将代码改动立即提交。提交到本地版本库之后,本地和远程的版本就不一样了,因此需要fetch、merge、push来同步版本库。

使用git最大的感触就是安全(故障率低、易恢复)、速度快,而SVN则频繁因为网络问题无法提交。

开始使用

git clone 克隆版本库

1
2
3
git clone https://github.com/xaoxuu/AXKit.git
# 或者
git clone https://github.com/xaoxuu/AXKit.git AXKit

git ignore 配置

要忽略某些文件的改动需要配置.gitignore文件:

1
2
3
4
5
6
7
8
9
10
11
12
# 这是macOS文件夹属性的隐藏文件,不需要同步到git
.DS_Store

# 某个文件夹不想要同步到git
/public
/node_modules

# 某个文件不想要同步到git
test.txt

# 通配符
._*

日常操作

add

1
2
# 把所有改动添加到版本库
git add --all

commit

1
2
git commit -m 'message'
# 注意,如果message没有空格的话,可以不加引号,言简意赅又节省时间。

pull/push

1
2
3
4
5
6
7
8
# 更新所有分支
git fetch

# 将dev分支合并到当前分支
git merge dev

# 将更新后的本地分支同步到远程
git push origin

代码冲突

我一般使用Tower客户端操作,pull之后有冲突的文件会列出来。建议使用一个比较好的编辑器如 Atom ,有冲突的部分会用两种颜色高亮。

版本回退

如果冲突文件没有妥善解决就提交到版本库导致严重后果,或者需要看到某个历史时刻的代码,都可以使用:

1
2
git log
# 查看提交记录

然后copy某个commit id,

1
2
3
4
5
git reset [commit id]
# 默认是soft,回到某个commit,而当前的代码依然在,处于未commit的状态。

git reset --hard [commit id]
# 彻底回到某个commit,完全回到那个时刻的状态。

版本迭代

分支branch

查看当前所有分支

1
git branch

新建并切换到新的分支dev

1
git checkout -b dev

仅仅切换到dev分支

1
git checkout dev

dev分支push到远程

1
git push origin dev

删除分支(dev)

1
2
3
4
5
6
7
8
# 删除本地分支
git branch -d dev

# 删除远程分支
# 方法一:将空白分支覆盖到远程dev分支
git push origin :dev
# 方法二:执行删除命令
git push origin --delete dev

标签tag

标签本质上和分支一样,适用于分支的操作也同样适用于标签,有区别的是:

查看所有tag

1
git tag

把当前HEAD打个tag(名为:1.0)

1
2
3
git tag 1.0
# 也可以添加备注信息,如同commit
git tag 1.0 -m 'message'

切换到某个tag(1.0)

1
git checkout 1.0

push到远程

1
2
3
4
# push所有未push的tag
git push --tags
# push指定的tag
git push origin 1.0

删除tag(1.0)

1
2
3
4
5
6
7
8
# 删除本地tag
git tag -d 1.0

# 删除远程tag
# 方法一:将空白tag覆盖到远程tag
git push origin :1.0
# 方法二:执行删除命令
git push origin --delete 1.0

客户端

Stash功能

  • save:将当前未commit的代码保存到stash,并且回到上次commit的状态。
  • apply:应用某个stash的代码。

Git-Flow功能

自动化管理功能,例如准备开发2.0版本的时候:
点击Start Release,客户端会自动新建一个release分支。

准备增加一个新特性的时候:
点击Start Feature,客户端会新建一个feature分支。

需要修复bug的时候:
点击Start Hotfix,客户端会新建一个fix分支。

当修复完bug,点击Finish Hotfix的时候,客户端会自动把fix分支合并到创建它的分支,并且创建一个tag。
当一个新特性开发完成,点击Finish Feature的时候,客户端会自动把feature分支合并到创建它的分支,并且创建一个tag。
当一个新版本开发完成,点击Finish Release的时候,客户端会自动把release分支合并到创建它的分支,并且创建一个tag。

git-ssh 配置和使用

1
ssh-keygen -t rsa -C 【邮箱】

其中【邮箱】对应的是你的Git邮箱。



ssh-agent是一种控制用来保存公钥身份验证所使用的私钥的程序,其实ssh-agent就是一个密钥管理器,运行ssh-agent以后,使用ssh-add将私钥交给ssh-agent保管,其他程序需要身份验证的时候可以将验证申请交给ssh-agent来完成整个认证过程。

1
eval "$(ssh-agent -s)"

添加生成的 SSH key 到 ssh-agent:

1
ssh-add ~/.ssh/id_rsa



登陆Github, 添加 ssh:



把id_rsa.pub文件里的内容复制到这里:




 评论