阅读 269

Git 常用命令实战记录

Git命令众多,本文只记录了一些本人在实际开发中使用频次很高的一些命令和它们的使用场景。

假设现有一个新项目。 SSH 地址: git://github.com/username/project_example.git

一、 复制项目

1. clone 项目
$ git clone git://github.com/username/project_example.git
复制代码

本地目录会出现 project_example 文件夹。

$ cd project_example
复制代码

cd 命令进入此文件夹,可执行安装依赖,运行项目等操作。

2.创建本地仓库,git remote add 命令
$ git init project_example
复制代码

或者本地已经存在 project_example 文件夹,在此目录中执行 git init 命令

注意: 本地的文件夹 project_example 可以不和仓库但名字一样,但最好保持一致。

$ cd project_example
$ git init
复制代码

这样存在了一个本地仓库 project_example

接下来要执行 git remote add 命令

$ git remote add origin git://github.com/username/project_example.git
复制代码

此命令使本地仓库与远程仓库建立关联。

但此时本目录还是一个空文件夹,需要执行下面操作

$ git fetch --all && git reset --hard origin/master 
复制代码

这两个命令按顺序执行,强制覆盖本地仓库。

二、远程代码强制覆盖本地代码

刚才用到了 git fetch --allgit reset --hard origin/master 作用是强制覆盖本地仓库。

git fetch --all 命令的作用是从远程获取最新版本到本地,不会自动合并。

git reset --hard origin/master 命令使本地代码回退到远程的版本,会看到类似 HEAD is now at <commitHash> <commitMessage> 这样的提示,表示 HEAD 已经到了远程最新的一次提交。

git fetch --allgit reset --hard origin/master 通常结合起来使用,场景除了 clone 一个远程项目到本地,还有一种场景就是合并本地分支时出现冲突,在保证远程代码正确的情况下,使用这两个命令完全复制远程代码,用来解决本地冲突。

三、分支

实际开发中通常需要三个分支

  • 开发环境: dev
  • 测试环境: test
  • 生产环境: 默认把 master 当作生产环境
1. 创建分支

master 是Git版本管理工具提供的默认分支,要创建本地分支需要用到 git branch <branch-name> 命令

$ git branch dev
复制代码

此时创建 dev 分支成功。用 git branch --all 命令查看本地分支有哪些:

  dev
* master
  remotes/origin/HEAD -> origin/master
  remotes/origin/master
复制代码

可看到本地已经出现了 dev 分支,星号 * 指向当前是 master 分支。

2. 切换分支

git checkout <branch-name> 命令切换分支

$ git checkout dev
复制代码

此时已经创建 dev 分支。

git branch --all 命令查看

* dev
  master
  remotes/origin/HEAD -> origin/master
  remotes/origin/master
复制代码

当前在 dev 分支。

也可以使用 git checkout -b <branch-name> 命令创建并切换到新分支。

$ git checkout -b dev
复制代码
3. 提交分支到远程

git push origin <branch-name> 命令用于提交分支到远程。

git push origin dev
复制代码

本地创建了 dev 分支,远程并没有,所以此命令把 dev 分支推到远程。创建和提交 test 分支的过程同 dev 分支。

四、提交与合并

1. 提交

我们在 dev 分支开发,通常的提交步骤是:

$ git pull
$ git add .
$ git commit -m "commit message"
$ git push
复制代码
  • 一定要先 git pull,不然本地代码会冲突。
  • git add . 添加文件到暂存区。
  • git commit - 将暂存区内容添加到仓库中。
  • git push上传远程代码并合并。
2. 合并

需要把 dev 分支(开发环境)代码合并到 test 分支(测试环境)

git merge <branch-name> 命令将当前所在的分支和 合并 ,简单将指针向前推进 fast-forward

$ git checkout test
$ git pull
$ git merge dev
复制代码
  • 如果当前正在 dev 分支,需要先切换到 test 分支
  • git pull 命令先执行是考虑到多人开发的场景,有可能别人提交过 test 分支的代码。
  • git merge dev 命令将 test 分支和 test 分支合并,将指针向前推进 fast-forward

注意:按上面命令合并后,有冲突的文件会以未合并状态 unmerged 标识出来,通过使用 git status 命令查看,然后手动解决,解决后用 git add 标示已解决。

四、git cherry-pick

最后要介绍一下 git cherry-pick 命令,这是最近使用过的命令。

git cherry-pick <commitHash> 命令将指定的某次提交(commitHash)合并到当前分支。

这样的合并只把某次提交的代码合并到当前分支,其他次提交的内容不会合并。

我遇到的场景大概是这样的:

  • dev 分支包括了项目所有功能,比如模块A模块B,这两个 模块 之外的其他内容称为 公共内容
  • 现在生产环境除了 master 分支(包括模块A模块B),还有masterA 分支(只包括模块A)和 masterB 分支(只包括模块B)。
  • 现在需求是改一部分 公共内容,并把这次修改提交合并到masterA 分支。

过程大概是这样:

dev 分支修改 公共内容 并提交了代码 假设这次提交的 <commitHash>b1359ab1,需要执行的命令是:

$ git checkout masterA
$ git cherry-pick b1359ab1
复制代码
  • 先切换到 masterA 分支
  • 执行 cherry-pick 命令

如此只把 dev 分支的 b1359ab1 那次提交内容合并到了 masterA 分支。

文章分类
开发工具
文章标签