首页 Git Notes
文章
取消

Git Notes

1. 新建远端 Git 仓库

  1. 先取好库的名字 (例如: myfirstrepo), 然后在 GitHub 等 Git 服务上建立新的 repository (参考具体服务帮助)
  2. 在 GitHub 上新建好库以后, 在本地新建目录 myfirstrepo. 然后执行 git init
  3. 然后 新建 README.md AUTHORS 文件. 提交到本地库的 master 分支上面
  4. git push -u ssh://XXXXX/myfirstrepogit master (用 push -u 把本地库上传到远端库)
  5. 最后, 配置好本地设置:
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. 初始状态

img

6.2. 在本地做了一些改动, 并提交到本地库

img

6.3. 把改动更新到远程库

先 用 fetch (相当于 svn 提交之前, 先做 svn up) 把远程库中的更新拉到本地, 有更新的话, 本地库中的远程分支会被更新

1
2
3
git fetch origin
   34b420d..4f8b18f  develop    -> origin/develop
   ff56772..58708fa  master     -> origin/master

img

这个时候发现远程也有更新, 本地也有更新, 所以需要先做一次 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 个阶段。

第一阶段:从「主分支」创建新的「工作分支」

  1. 在「主分支」(master)做一次 pull 确保「主分支」最新:git pull
  2. 从「主分支」创建一个新的「工作分支」,例如:feature_onegit branch feature_one
  3. checkout 到新的「工作分支」(feature_one):git checkout feature_one

第二阶段:在新的「工作分支」上工作

  1. 在新的「工作分支」(feature_one)上做开发测试

开发测试所需时间通常是 3 天 - 2 周。注意:在此期间,「主分支」(master)可能被其他人更新

第三阶段:把新的「工作分支」合并到「主分支」

  1. checkout 到「主分支」(master):git checkout master
  2. 在「主分支」上做一次 pull 把「主分支」更新到最新:git pull
  3. checkout 到新的工作分支(feature_one):git checkout feature_one
  4. 在新的「工作分支」上做一次 rebasegit rebase master
  5. checkout 回到「主分支」(master):git checkout master
  6. 在「主分支」上做 mergegit merge feature_one。把「工作分支」上的内容合并到「主分支」
  7. 在「主分支」上做 pushgit push

注意:在做上面第 4 步 rebase 的时候,可能提示有冲突,需要解决。此时需要按 git 的提示解决 rebase 冲突。完成 rebase 之后,再进行之后的步骤。

Reference

本文由作者按照 CC BY 4.0 进行授权