# 常用git命令

> git官方中文文档 <https://www.git-scm.com/book/zh/v2> 中包含更多的信息

---

## 从远程克隆一个仓库

```bash
# 通过SSH连接克隆一个仓库（可能需要事先配置SSH公钥）
# 执行成功后会在当前路径创建一个名为fsdoc的目录，进入目录后即可以用git命令操作仓库了
git clone git@gitee.com:wandoubaba517/fsdoc.git
# 通过HTTP连接克隆一个仓库（有时可能会需要用户名和密码）
# 执行成功后会在当前路径创建一个名为callapp_mrcp的目录
git clone https://gitee.com/polaris-arvin_admin/callapp_mrcp.git
```

> 除了`git clone`命令外，其他git命令都需要在仓库目录下进行操作

## 分支操作

> 别忘了在仓库目录下操作

```bash
# 查看所有分支（本地和远程）
git branch -a
# 切换分支
git checkout develop
# 创建一个名为iss053的分支同时切换到这个新分支
git checkout -b iss053
# 在iss053分支提交修改
git commit -a -m "添加一些git分支操作"
# 将iss053分支的变更合并到master分支
git checkout master
git merge iss053
# 合并后可以删iss053分支
git branch -d iss053
# 如果合并时发现冲突，需要手动处理一下
# 刷新远端分支列表
git remote update origin -p
# 在没有使用git add之前放弃当前全部操作
git checkout .
# 在使用了git add后但还没有git commit之前放弃当前全部操作
git reset HEAD .
git checkout .
# 在使用了git commit后回滚操作
git reset --hard HEAD^          # 回滚到上一次commit状态
git reset --hard <commitid>     # 回滚到指定的任意一次提交
# 查看commitid
git log     # 退出请按q键
```

## 代码推拉

> 别忘了在仓库目录下操作

```bash
# 从远程分支拉取代码到本地
git pull    # 会提取默认关联的远程分支

# 添加本次要跟踪的代码(全部)
git add .
# 提交变更（在本地）
git commit -m "本次提交说明内容"

# 把变更推送到远程服务器
git push    # 推送到默认关联的远程分支
git push origin # 有些时候当关联有问题时，可能需要手写origin
git push origin bob # 可以指定目标远程分支
```

## 给本地的一个文件夹添加git管理并关联远程仓库

```bash
# 在这个文件夹内执行
git init
# 给本地的一个git文件夹关联一个远程服务器
git remote add origin git@gitee.com:wandoubaba517/ps.git
# 对目录内所有文件建立跟踪
git add .
# 提交本次跟踪
git commit -m "这次提交的说明"
# 推送当前分支并建立与远程上游的跟踪
git push --set-upstream origin master
# 把本地当前分支与远端指定分支关联（关联后在本地这个分支下直接git pull和git push就行了，不需要再加origin）
git branch --set-upstream-to=origin/<branch>
```

## 在一个本地目录上添加多个远程仓库

```bash
# 关联另一个远程仓库
git remote set-url --add origin git@gitee.com:wandoubaba517/personal.git
# 推送当前分支并建立与远程上游的跟踪
git push --set-upstream origin master
# 以后再推送时直接push就行了
git push
```
