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 --all
和 git reset --hard origin/master
作用是强制覆盖本地仓库。
git fetch --all
命令的作用是从远程获取最新版本到本地,不会自动合并。
git reset --hard origin/master
命令使本地代码回退到远程的版本,会看到类似 HEAD is now at <commitHash> <commitMessage>
这样的提示,表示 HEAD
已经到了远程最新的一次提交。
git fetch --all
和 git 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
分支。
转载自:https://juejin.cn/post/6992758710812540958