概述
本文浅讲一下 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 基本工作方式,修改/添加/删除文件,然后 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 的流程和特点。
- Fork工作流与其它工作流截然不同。与其使用唯一的服务端仓库作为「中央」代码库,它给予每个开发者一个服务端仓库。也就是说每个贡献者都有两个Git仓库,而不是一个,一个私有的本地仓库和一个公开的服务端仓库
- Fork工作流的主要优点在于贡献可以轻易地整合进项目,而不需要每个人都推送到单一的中央仓库。开发者推送到他们自己的服务端仓库,只有项目管理者可以推送到官方仓库。这使得管理者可以接受任何开发者的提交,却不需要给他们中央仓库的权限
- 结论是,这种分布式的工作流为大型、组织性强的团队(包括不可信的第三方)提供了安全的协作方式。它同时也是开源项目理想的工作流。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日,文中内容可能已过时,请谨慎参考。