git 常用命令速查表

git.jpg

以一个正常的 git 使用(拉代码、提交、推代码)为引导线说起

配置别名

别名配置就是一条命令git config --global alias.a b,这里 --global 表示修改对全局生效,如果不加,只对当前仓库起作用,ab指对应的别名和 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 popfeat-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

文章作者: 小笨
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 小笨 !
评论
 上一篇
2023-11-05 小笨
下一篇 
2023-04-30 小笨
  目录