目录

Git基本操作和基于Fork的工作流

概述

本文浅讲一下 Git 的基本操作和 Fork 工作流

Git基本操作

Git重要的命令

1
2
3
git help
man git
git xxx --help

Git的几个概念

1
2
3
4
worktree = workspace = 工作区 = 工作目录
index = stage = git 索引 = 暂存区
.git = repository = 本地 repo = 本地仓库
remote = remote repo = 远程仓库
/git%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C%E5%92%8C%E5%9F%BA%E4%BA%8Efork%E7%9A%84%E5%B7%A5%E4%BD%9C%E6%B5%81/img.png

Git 基本工作方式,修改/添加/删除文件,然后 git add,把文件内容加入 git 索引,接着 git commit 把内容存入 repo。

Git 仓库中的文件按照是否被 Git 仓库管理,分为三种状态 tracked/ignored/untracked。

Git的常用命令

请在 /tmp 目录下进行以下操作。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
# .git 文件夹就是 repo
git init

# tmp 目录下载远程仓库
git clone git@gitlab.test.net:runzhliu/git-sharing.git

# 切出工作分支/开发分支
git checkout -b dev_{邮箱地址}
git checkout -b dev_lrz@test.cn

# 增加文件
touch test
vim test

# 查看 Git 文件系统的情况
git status

# 提交到 git 索引
git add -A

# 提交到 repo,并撰写 commit message
git commit

# 查看提交记录
git log

# 修改文件内容
vim test

# 再次提交到 git 索引并且提交到 repo
git add -A
git commit

# 推向远程
git push -u orgin dev_{邮箱地址}

# 切换分支到 master
git checkout master

# 拉取远程仓库,可以看到有很多分支生成了
# orgin 代表远程仓库
git fetch orgin

# 切回自己的分支,删除文件,提交到索引和仓库
rm test
git add -A
git commit

# 回滚找到之前的文件
# 确定文件在哪个 commit_id 上
git log

# 回滚的几种方式 soft/mixed/hard
git reset --soft commit_id
git reset --hard commit_id

# 合并操作 merge,本地分支的代码 merge 进去 master
git merge dev_{邮箱}

# 另一种合并操作
git rebase master

# 合并是有可能会有冲突的
# master 和 dev_{邮箱} 同时修改 test 的最后一行
git rebase master

# 远程合并提交 pull request/merge request,本地 master 拉取远程 master
git pull

本地分支太多

随着一个项目的深入,本地分支数目肯定会越来越多,尤其是那些一直添加分支,从来不删分支的程序要来说,分支越多越痛苦……因为当你想创建一个 hotfix 分支去做热修复的时候,却发现该分支仍然存在,于是你有需要删除 hotfix 分支,再重新建一个 hotfix 分支…

解决的办法是首先找到已经被合并的本地分支,然后再批量删除这些被合并过的本地分支。串起来是这样的:

1
git branch --merged | xargs git branch -D

git branch --merged 显示所有已经在远程合并的分支,xargs 是前面的运行结果作为后面的输入参数。

Fork工作流

首先介绍一下 Fork 的流程和特点。

  1. Fork工作流与其它工作流截然不同。与其使用唯一的服务端仓库作为「中央」代码库,它给予每个开发者一个服务端仓库。也就是说每个贡献者都有两个Git仓库,而不是一个,一个私有的本地仓库和一个公开的服务端仓库
  2. Fork工作流的主要优点在于贡献可以轻易地整合进项目,而不需要每个人都推送到单一的中央仓库。开发者推送到他们自己的服务端仓库,只有项目管理者可以推送到官方仓库。这使得管理者可以接受任何开发者的提交,却不需要给他们中央仓库的权限
  3. 结论是,这种分布式的工作流为大型、组织性强的团队(包括不可信的第三方)提供了安全的协作方式。它同时也是开源项目理想的工作流。namespace 不同了,权限都在自己手里,成为Fork项目的Maintainer
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
# 查看远程仓库
git remote -v

# 配置官方仓库的地址
git remote add upstream git@gitlab.test.net:data-dev/recommend-system.git

# 拉取官方仓库的分支到本地
git fetch upstream master:master-dev

# 合并远程仓库的代码
git rebase upstream/master

# 在本地 master 提交更新并且向远程仓库发起 pull request/merge request
touch abc
git add .
git commit
git push
警告
本文最后更新于 2017年2月1日,文中内容可能已过时,请谨慎参考。