git 常用命令速查表
以一个正常的 git 使用(拉代码、提交、推代码)为引导线说起
配置别名
别名配置就是一条命令git config --global alias.a b
,这里 --global
表示修改对全局生效,如果不加,只对当前仓库起作用,a
和b
指对应的别名和 git 命令
# 配置别名 将commit简写为ci 提交git commit可简写为git ci
git config --global alias.ci commit
git config --global alias.br branch
# 很强大的历史记录 建议试试
git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"
这些配置都会写入全局 Git 配置文件(存储在用户主目录下的一个隐藏文件.gitconfig)中,我们也可以直接修改这个文件,更加直接。
控制台直接一条命令git config --global --edit
显示全局配置,如果我们换电脑了,直接把对应的部分复制过去就好了
如果用 Mac 的话,也可以使用 on-my-zsh
安装 oh-my-zsh 后默认会打开 git 插件,它会在命令行下光标前显示当前分支名称,还可以实现自动补全,输入 git re 按 tab 会自提示可以选择命令,再按 tab 就可以选择命令,方便命令输入。
拉取代码
git clone https://xxx.com/fe/xxx.git
安装依赖,运行项目。
修改Bug
使用的feat-table
这个分支
# 新建分支
# git checkout -b feat-table
git checkout -b feat-table
# 拉取代码
git pull origin feat-table
可以合并使用一个命令
# 创建分支并从远程分支拉取代码
# git checkout -b feat-table origin/table
git checkout -b feat-table origin/table
任务暂停
假如线上出现一个紧急bug,必须要求立刻改,但是手上的bug还没有改完
# 先把代码储存在本地缓存
# git stash save "未改完的bug,等下再改"
git stash save "未改完的bug,等下再改"
# 切换master 重新拉一个新分支
git checkout master
# git checkout -b fix-xxx
git checkout -b fix-xxx
stash 更多操作
git stash # 暂存当前正在进行的工作,比如想 pull 最新代码,又不想加新 commit,或者为了 fix 一个紧急的 bug,先 stash,使返回到自己上一个 commit,改完 bug 之后再 stash pop, 继续原来的工作
git stash save "message" # 暂存时加备注 方便查找
git stash show # 默认显示第一个改动 如果显示其他 git stash show "stash@{1}"
git stash show -p # 改动的具体内容
git stash apply # 恢复第一个存储 恢复其他使用 git stash apply "stash@{1}"
git stash drop "stash@{2}" # 删除stash@{2}存储
git pop # stash apply 和 stash drop 结合体
git stash clear # 清空stash
当你改完这个 bug 之后,提交代码:
# 提交当前所有修改文件
# git commit -am "fix: 修复线上紧急buh"
git commit -am "fix: 修复线上紧急buh"
修改提交的信息-amend
# 将上次提交的提交信息改为 -m 后的信息
# git commit --amend -m "fix: 修复线上紧急bug"
git commit --amend -m "fix: 修复线上紧急bug"
# 推代码
git push
如果你提交后发现少改了一个文件,可以补救一下
# 将未提交的代码 添加到暂存区
git add .
# git ci --amend --no-edit
git amend -f
git push
amend 更多操作
只修正文件,不修正提交信息,如提交的时候发现有文件忘记提交,先添加到暂存区,再使用下面的命令进行修正,之后就可以看到提交中已经有了忘记提交的文件
# git commit --amend --no-edit
git commit --amend --no-edit
如果多提交了文件,也可以先通过git rm --cached <文件名>
,再通过以上命令修正。
只修正提交信息,如提交时发现写的提交信息不太正确时
# git commit --amend -m "feat: xxx"
git commit --amend -m "feat: xxx"
修改提交信息和文件
# git commit --amend
git commit --amend
版本回退
# 将 HEAD 指向前一次提交 即回退上一次提交到工作区
git reset HEAD~1
# 然后修改代码 重新添加到工作区提交
# git commit -am "fix: 修复线上紧急bug"
git commit -am "fix: 修复线上紧急bug"
此时,再往远程推送代码时,因为你本地的提交记录和远程提交记录已经不同了,需要使用git push -f
操作将远程的提交覆盖掉,直接 push 的话因为与远程提交不一致,没法推到远程,所以使用git push -f
强制将本地提交同步到远程分支。
reset 更多操作
git reset 通过控制 HEAD 应该指向的位置,来达到重置的目的。
软重置 soft
假如已经提交的文件有问题,想撤销提交,但又想保留文件,这时候就可以使用软重置将 HEAD 指向前一次提交,然后可以重新修复并提交; 也可以使用 commitId 退回到某次指定的提交。
# 撤销上一次提交 HEAD~2/3 撤销前两次/三次提交
git reset --soft HEAD~1`
# 退回到某次提交
git reset commitId
硬重置 hard
有时候并不想保留特定提交引入的修改,Git 应该直接将整体状态重置到特定提交之前的状态,使用git reset --hard HEAD~1
。
这时候代码已经推到远程分支,需要你提一个 mr 给项目负责人,然后他去合并代码,如果他直接 merge 的话,master 分支会产生一条额外的合并记录Merge branch 'xxx' into 'master'
。
如果不想有这么一条记录,可以使用
# 将指定提交拣选到master分支
# git cherry-pick commitId
git cp commitId
cherry-pick 可以帮助我们实现代码迁移,但是需要提交功能明确,不要参杂太多的东西。
切换分支
# git checkout feat-table
git checkout feat-table
假设你的分支名称很长:feat-table-wx-230503
,你要切回来的话还得复制分支名称,然后再切
可以使用
# git checkout -
git checkout -
删除分支
# -d 只有分支合并并推送后才可以删除
# -D 是 --delete --force 的别名,无论任何情况下都可以删除
# git branch -D fix-xxx
git br -D fix-xxx
删除远程分支
如果想要删除远程分支,则可以直接从 gitlab 的分支中删除,或者使用命令
# 删除刚刚的修改bug分支
git push origin --delete fix-xxx
更多分支删除操作
# 删除分支名包含fix的分支
# git branch | grep 'fix' | xargs git branch -d
git br | grep 'fix' | xargs git br -d
# 删除除feat-table外所有的分支
# git branch | xargs git branch -d feat-table
git br | xargs git br -d feat-table
任务继续
git stash pop
拉取合并
用git stash pop
把feat-table
分支上储藏的代码先弹出来,接着一顿操作,完了推送代码到远程,当你执行 git push 的时候,发现远程仓库有修改,git 会提示你先执行 git pull 拉代码时,只要有冲突提示你修改,然后改完之后,git 会帮你自动合并生成一次提交,类似这样Merge branch "fix-table' of https://git.qmpoa.com/fe/qtable_docs into fix-table
,提交很丑,如何规避。
git pull --rebase
这样拉取远程代码时,如果有冲突时,你可以这样做:
- 解决完冲突后,
git add .
将代码添加到暂存区; - 通过
git rebase --continue
继续执行 rebase 操作; - 如果没有冲突后,就可以 push 到远程了。
rebase 更多操作
git rebase --continue # 继续rebase操作
git rebase --skip # 跳过此补丁操作
git rebase --abort # 直接退出rebase