1. 新建远端 Git 仓库
- 先取好库的名字 (例如: myfirstrepo), 然后在 GitHub 等 Git 服务上建立新的 repository (参考具体服务帮助)
- 在 GitHub 上新建好库以后, 在本地新建目录 myfirstrepo. 然后执行 git init
- 然后 新建 README.md AUTHORS 文件. 提交到本地库的 master 分支上面
- git push -u ssh://XXXXX/myfirstrepogit master (用 push -u 把本地库上传到远端库)
- 最后, 配置好本地设置:
1
2
git config user.name "My Name"
git config user.email "XXXXX@XXXX.com"
2. 远程库和本地库
远程库就是在服务器上的代码, 类似以前的 svn repository. 例如: ssh://XXXXX/myfirstrepogit 就是一个远程 Git 库.
本地库. Git 特殊的地方是 (相对 cvs, svn 等传统的版本管理工具), Git 不需要联网也可以进行版本控制工作 (只是提交都提交到了本地 的 Git repository), 所谓本地库就是本地的 Git repository
3. 远程分支和本地分支
- 远程分支: 远程库中的代码分支 (origin/master, origin/develop)
- 本地分支: 本地库中的代码分支 (master, develop)
3. 初次从远程分支创建自己的工作分支
例如, 我们把 服务器上 Git repository 中的 develop 分支下下来:
1
git clone ssh://XXXXX/myfirstrepogit -b develop
这次 clone 操作, 建立了本地的代码库, 而且对应一个远程库 origin (origin 是 远程库的名字)
用下面的命令可以检查远程库信息:
1
2
3
4
5
6
7
8
git remote show origin
* remote origin
Fetch URL: ...
Push URL: ...
HEAD branch (remote HEAD is ambiguous, may be one of the following):
develop
master
...
本地库中有一个 develop 分支, 同时跟踪一个远程分支 origin/develop
检查一下本地分支:
1
2
git branch
* develop
检查一下远程分支:
1
2
3
4
git branch -r
origin/HEAD -> origin/master
origin/develop
origin/master
检查一下所有分支:
1
2
3
4
5
git branch -a
* develop
remotes/origin/HEAD -> origin/master
remotes/origin/develop
remotes/origin/master
5. 本地切换到其他的远程分支上去工作
例如, 现在本地已经和远程的分支 master 同步了, 并在 master 上工作. 现在想同步远程的另外一个分支: develop, 并在本地切换到 develop 分支上去工作:
1
git checkout --track origin/develop
检查一下:
1
2
3
git branch
* develop
master
现在本地已经在 develop 分支上工作了
6. 把自己的改动更新到远端库
在 master 上工作:
6.1. 初始状态
6.2. 在本地做了一些改动, 并提交到本地库
6.3. 把改动更新到远程库
先 用 fetch (相当于 svn 提交之前, 先做 svn up) 把远程库中的更新拉到本地, 有更新的话, 本地库中的远程分支会被更新
1
2
3
git fetch origin
34b420d..4f8b18f develop -> origin/develop
ff56772..58708fa master -> origin/master
这个时候发现远程也有更新, 本地也有更新, 所以需要先做一次 merge
1
git merge origin/master
确认 merge 没有问题, 再更新到本地库
1
2
git add
git commit -m "merge..."
最后再更新到远程库:
1
git push
7. 本地工作模式
- 本地工作时, 可以任意建自己的分支, 做任意的提交
- 但最后要更新到远程库时, 先要把更新的内容放到 要更新的 分支上 (例如, 要更新远程的 dev 分支, 就要先把更新的内容先放到本地的 dev 分支上), 然后再 push 到远程库
8. 新建一个远程分支
先在本地准备好一个新的分支, 例如本地先准备好了一个新分支: feature-M5-2:
1
2
3
git branch
develop
* feature-M5-2
然后在把本地分支发布到远程库里面:
1
git push origin feature-M5-2
9. Fork & upstream
从 remote 库 clone 出来以后. 有一个默认的 remote: origin
但是这个 remote 可能不是 upstream. 如果需要跟踪 upstream 的话, 需要再添加一个 upstream 的 remote
添加命令如下:
1
git remote add upstream https://gitlab.... (upstream 库的地址)
10. Tag
打一个tag:
1
git tag -a v1.4 -m 'my version 1.4'
查看 tag:
1
git tag
push tag 到 remote:
1
git push origin --tags
11. 合并多个提交
在没有 push 到 remote 之前, 可以修改本地的提交. 例如合并最近3个提交:
1
git rebase -i HEAD~3
然后按 git 的提示做修改操作
12. Git 基本工作流程
该流程分为 3 个阶段。
第一阶段:从「主分支」创建新的「工作分支」
- 在「主分支」(master)做一次 pull 确保「主分支」最新:
git pull
- 从「主分支」创建一个新的「工作分支」,例如:feature_one:
git branch feature_one
- checkout 到新的「工作分支」(feature_one):
git checkout feature_one
第二阶段:在新的「工作分支」上工作
- 在新的「工作分支」(feature_one)上做开发测试
开发测试所需时间通常是 3 天 - 2 周。注意:在此期间,「主分支」(master)可能被其他人更新
第三阶段:把新的「工作分支」合并到「主分支」
- checkout 到「主分支」(master):
git checkout master
- 在「主分支」上做一次 pull 把「主分支」更新到最新:
git pull
- checkout 到新的工作分支(feature_one):
git checkout feature_one
- 在新的「工作分支」上做一次 rebase:
git rebase master
- checkout 回到「主分支」(master):
git checkout master
- 在「主分支」上做 merge:
git merge feature_one
。把「工作分支」上的内容合并到「主分支」 - 在「主分支」上做 push:
git push
注意:在做上面第 4 步 rebase 的时候,可能提示有冲突,需要解决。此时需要按 git 的提示解决 rebase 冲突。完成 rebase 之后,再进行之后的步骤。