常用git命令操作

100 阅读6分钟

前言

虽然git目前现在有很多的可视化操作软件,各大编译器也对git进行了强有力支持。但个人还是习惯于直接使用git,敲击的感觉很爽。

同时这样也不容易忘记一些指令,避免面试被问到尴尬。

本地存取

  • git stash 存

  • git stash pop 取

经常用于自己在一个分支上改了很多代码,临时要切换到别的分支。这时必须将本地提交才可以切换,但是没写完或者有报错又不想提交。就可以使用git stash命令将改动保存起来,当切换回来后在使用git stash pop 取出来,就可以接着开发,非常的方便。

还有一些其他的指令

  • git stash list 查看所有的git stash 记录;

  • git stash clear 清除所有的stash;

  • git stash push xxxx stash指定的xxxx文件;

  • git stash pop 从stash中恢复文件,并且删除stash中的内容;

  • git stash apply 从stash中恢复文件,并且不删除源文件;

切换分支

git checkout 分支名

合并分支

  • git merge 分支名
  • git merge --no-edit 分支名

将xxx分支合并到当前分支,合并后会出现合并记录让你添加合并信息,不添加就输入 :q 来保存退出,如果出现了什么意外报错 No writer since last change, 那就输入命令 :q! 来进行退出。

如果提交时不想添加任何信息,可以直接加上 --no-eidt 就可以跳过上一步快捷合并。

删除分支

  • git branch --delete 分支名称
  • git branch -D 分支名称

如果在当前删除的分支上,则会报错can’t delete 分支,需要切换到别的分支上在删除。如果有未完全合并的分支内容导致无法删除的话就使用第二条删除方法。

撤销更改

  • git checkout .
  • git reset --hard logId

这里是面试常考到的地方。第一个命令适用于撤销所有git add .所修改的文件,可以将修改文件撤销出来。但是不包括新建的文件,需要手动删除。如果想撤销指定的文件,可以将.替换为对应的文件路径 git checkout src/xxx/xxx.tsx

第二条命令适用于撤销git commit 所提交的文件,这时提交成功了会有一个logId。可以通过查看logId来判断自己想退回到哪一次提交。--hard表示退回的方式,还有其他方式这里不做详细介绍,自行了解。

查找logId

  • git log

查看当前的git提交记录,查看完毕后按键盘左上角的q退出页面。

修改commit信息

不同公司对于commit都有固定的格式要求,可能提交时还要携带一个任务ID。可是如果手敲时候敲错了,就会导致推送失败。通过以下的指令就可以帮你修改commit信息。

  • git commit --amend

    具体方式是:

    1. 先输入这个指令
    2. 在打开的界面中 输入i进入输入模式 下方会出现 --插入--,或者是--INSERT--
    3. 然后使用上下箭头移动鼠标光标到最上方的commit信息修改对应的commit内容即可
    4. 修改完成后按ESC退出编辑模式
    5. 退出后在输入 :wq 来退出
    6. 然后再push就好了,不放心的可以在使用git log 命令重新查看一下 commit记录。使用git log指令后嗯左上角的q退出界面。

撤销合并

  • git merge --abort

代码合并时,合并之后不想合并或者合并错误想退回可以使用 这个指令来退回到合并之前的代码。但前提是你的合并没有冲突所导致的新增(add commit ),有新增需要先将新增撤回,才能退回到原来的位置。

拉取远程分支xxx到本地分支

  • git pull origin 远程分支

当你想将你的分支合并到develop分支上,担心有冲突。又或者你提了pr,但是显示二者分支有冲突,无法自动合并。就可以使用这个指令将远程分支拉到本地,解决完二者冲突后再重新操作。

设置用户名和邮箱

  • git config --global user.name 你的名字

  • git config --global user.email 你的邮箱

    查看是否设置成功

  • git config user.name

  • git config user.email

设置密钥

ssh-keygen -t rsa -C 你的邮箱

刷新新增分支

  • git fetch

当你在远程仓库新建了一个分支时,在本地切换会报错那个分支不存在。可以使用这个指令将新增的分支拉取到本地,在切换就不会报错了。

刷新删除分支

  • git fetch -p

当你在远程仓库删除了一个分支,但是本地却没有删除。在本地切换时会得到错误的信息,这个时候通过git fetch是无法刷新的,需要在后面加个 -p才可以。

经常用于一个分支创建错了,又想在创建一个同名的分支,本地和仓库不匹配的问题。

查看所有分支

  • git branch -a

解决合并分支时 Permission denied

产生原因

这个问题产生的原因是当使用 vscode开发时,在特性分支上开发完毕后,需要将代码合并到uat分支测试时。直接切换到uat分支后,vscode会对新分支的代码进行重新加载,会触发已启动项目的热更新。

如果这时你手速过快,在热更新结束前将之前的特性分支合并到当前uat分支,就有几率报出这个错。并且会将你的一部分文件删除掉,这时你的热更新就会报错缺少相应的文件。

以上是我的个人经验,详情可参考此文:# git checkout error: cannot create directory: Permission denied

这种问题目前只存在于vscode,有说法认为是visual studio 设置的文件锁导致的。

解决办法

  1. 首先要将删掉的文件找回来,使用上面提过的 git checkout .;
  2. 如果有新增的文件需要自己手动删除掉;
  3. 使用git status检查是否已经恢复到没出问题前;
  4. 再次重新运行之前的指令尝试是否可以运行成功,如果还是报这个错误则将vscod整体全部退掉,重新打开,重复上述流程。

当然最好的预防办法就是在merge时不要太着急,等一会再来。

设置默认推送到远端,不用加origin

git config --global push.default current