GitInWork

介绍下工作中常用的git 命令

获得帮助

任意指令,通过下面的格式即可获得帮助信息

git [cmd] -h

常用指令

0x01 git config

git config 设置当前当前仓库或者全局的git 配置。通过 –local 和 –global 参数用于区分当前仓库还是全局设置;基本常用配置涉及 username 和 email,还可以设置仓库记住用户名和密码的时间;

使用示例

git config --add --local user.name=JerryZhou343 
git config --add --local user.email=Jerry.Chau@qq.com

0x02 git init

git init 初始化一个目录为Git 仓库

使用示例

git init . #初始化当前目录为一个仓库

0x03 git clone

已经有远程仓库情况下可以通过git clone 克隆远程仓库到本地。可以指定克隆到目标目录,以及目标仓库的深度,目标分支等信息。

使用示例

mkdir cc
git clone https://github.com/JerryZhou343/cctool.git cc

0x04 git fetch

同步远程仓库信息,将远程仓库最新内容拉到本地

使用示例

# 1.同步分支信息
git fetch -p (小p)
# 2. 同步tag信息
git fetch -P (大p)
# 3. 演习
git fetch --dry-run
# 4. 指定远程分支
git fetch origin master

0x05 git pull

git pull 将远程主机的最新内容拉下来后直接合并,即:git pull = git fetch +git merge,这样可能会产生冲突,需要手动解决。

使用示例

git pull origin master # 拉取远程master分支和当前分支合并

0x06 git push

推送本地仓库到远程仓库

#1.推送当前master分支到远程
git push origin master 
#2. 推送当前master分支到远程,并关联两者
git push origin master -u # -u, --set-upstream    设置 git pull/status 上游
#3. 删除远程master 分支
git push origin :master
#4. 删除远程tag v1.10.0
git push origin :refs/tag/v1.10.0
#5. 推送tag
git push origin v1.10.0

0x07 git branch

Git 重要概念分支相关命令, -u 参数也能设置上游信息和git push 中的-u 一样

使用示例

# 1. 查看所有分支
git branch -al 
# 2. 创建分支
git branch dev
# 3. 删除分支
git branch -d dev # dev 为分支名
git branch -D dev # 强制删除dev分支
# 4. 重命名分支
git branch -m dev develop # 将分支dev 重命名为develop

0x08 git checkout

从当前head检出(切换)分支

使用示例

# 1. 创建并切换到分支dev
git checkout -b dev
# 2. 切换到分支 dev
git checkout dev

0x09 git tag

tag 指令用于打标签

使用示例

# 1. 创建标签
git tag  v1.0.0 
# 2.查看标签列表
git tag -l
# 3.删除标签
git tag -d v1.0.0

0x10 git remote

设置远程主机信息

使用示例

# 1. 添加远程主机,并命名为origin
git remote add origin https://github.com/JerryZhou343/cctool.git 
# 2. 删除远程主机origin
git remote remove origin
# 3. 重命名远程主机,由 origin 变更为upstream
git remote rename origin upstream

0x11 git reset

git 回滚指令之一;通过重置HEAD的位置达到回滚效果,该指令比较危险,慎重操作。

使用示例

# 1. 回滚到当前头
git reset --hard
# 2. 回滚到某次提交
git reset --hard 0ad288526634045b9d81377333bfb51975577ac4

0x10 git revert

git 回滚指令之一;通过撤销某次提交,并重新生成一次新的提交达到回滚的效果

使用示例

# 1. 回滚0ad288526634045b9d81377333bfb51975577ac4 这次提交并生成新的提交
git revert 0ad288526634045b9d81377333bfb51975577ac4

0x11 git merge

git 分支合并指令,合并过程可能会产生一次新的merge提交,并生成parent1, 和parent2; 假设我们在develop分支,需要将feature分支合并到develop分支,产生的merge提交的parent1 即是develop分支,parent2 为feature分支。在diff中可以看到,新的提交相对parent1和parent2的不同; 在手动处理合并突出的过程中,可以通过git merge –abort 和 git merge –continue 终止或者继续合并

使用示例

# feature 分支合并到develop分支
git checkout develop
git merge feature

0x12 git rebase

git rebase 称为变基,通常用于合并提交或者丢弃提交(不建议),不建议在merge场景下使用;建议交互方式挑选提交,通常用squash 或者fixup 选择某次提交。git rebase 建议作用于自己的本地仓库和未发布到公共仓库的提交,不然会导致公共仓库history产生变化,进而引起不必要的提交事故。

使用示例

# 1. 合并提交,从HEAD 往后数5次提交,将这5提交合并
git rebase -i HEAD~5

0x13 git cherry-pick

挑选提交到当前分支,当一个分支混杂了太多提交,想要丢弃分支,但是又想保留某些提交,就可以用这个命令在挑选想要的提交;

使用示例

# 1. 挑选 feature 分支上的提交到develop
git checkout develop
git cherry-pick commit-id

0x14 git patch

这个不是一个指令,而是从当前代码仓库生成git path, 然后传递git path文件,将git path 应用到其他仓库的方式;

使用示例

# 1. 生成补丁
git format-patch commit-id -x # commit-id 往前x提交生成 patch
# 2. 应用补丁
git apply xxx.path

0x15 git add

添加需要跟踪的文件和目录

使用示例:

git add . #当前目录下所有文件

0x16 git commit

提交暂存区文件

使用示例

git commit -m "feat:xxx" 
git commit --amend "feat:xxx" # 修改最近一次提交的评论

0x17 git status

查看当前本地仓库状态,git status 会显示当前仓库文件状态,标不同颜色,并给出操作提示

参考

git book