Git常用命令速查手册【蛮三刀酱出品】

前言

在你日常的开发中,会遇到很多Git的操作,但你从来没做过,这篇文章便是一本Git命令速查手册,里面总结了我工作这几年来最最常用的Git用法。相信对日常开发来说是有帮助的。

下面的常用方法和命令大部分都只涉及使用,不涉及原理讲解。如果有疑问,尽请留言~

常规功能

Git Commit 规约

feat:新功能(feature)
fix:修补bug
docs:文档(documentation)
style: 格式(不影响代码运行的变动)
refactor:重构(即不是新增功能,也不是修改bug的代码变动)
test:增加测试
chore:构建过程或辅助工具的变动

git忽略已经管理的文件及文件夹

后来才发现git已经tracking了某些想忽略的文件,这时候只在文件里加上想忽略的文件夹是不能生效的。可以理解成 有缓存,需要我们自己手动删除已经tracking的文件,执行如下命令:

git rm -r --cached ignoreFile(ignoreFile就是你想忽略的文件),让git不再tracking这些文件。

如何使用特定的SSH Key提交GIT

https://www.jianshu.com/p/82aa1678411e

Git全局username和当前项目username

学习git的时候, 大家刚开始使用之前都配置了一个全局的用户名和邮箱

git config --global user.name "github's Name"

git config --global user.email "github@xx.com"

git config --list

如果你公司的项目是放在自建的gitlab上面, 如果你不进行配置用户名和邮箱的话, 则会使用全局的, 这个时候是错误的, 正确的做法是针对公司的项目, 在项目根目录下进行单独配置

git config user.name "xxxxxxx"

git config user.email "xxxxxxxx@foxmail.com"

git config --list

查看当前配置, 在当前项目下面查看的配置是全局配置+当前项目的配置, 使用的时候会优先使用当前项目的配置

Global Config 和 仓库Config

在共同使用的机器上请勿随意修改Global config,会造成commit全是你的名字。

请使用文件夹config (–local),git会优先检测文件夹config再去寻找global config

修改已经提交的作者信息

网上给出答案都是自己写的脚本,有点过于繁琐,在逛segmentfault1找到了答案:

首先找到修改commit 前一个,执行

git rebase -i commit id

git会自动调用配置好的编辑器打开一个界面

修改第一行数据(就是我们预期要修改的那条commit)的pick为edit

这时候我们就可以通过git commit --amend来畅快的修改用户信息了,操作如下:

git commit --amend --author="xxx <xxx@xxx.com>" --no-edit

继续完成rebase,

git rebase --continue

Git打tag Tag推送到远程仓库

https://www.liaoxuefeng.com/wiki/896043488029600/902335212905824

打tag:

git tag v1.0

为了能把标签同步到远程服务器,我们可以这样做:

默认情况下,git push并不会把tag标签传送到远端服务器上,只有通过显式命令才能分享标签到远端仓库。

1.push单个tag,命令格式为:

git push origin [tagname]

例如:
git push origin v1.0 # 将本地v1.0的tag推送到远端服务器

2.push所有tag,命令格式为:

git push [origin] --tags例如:git push --tags或git push origin --tags

Windows无法创建文件名

As far as understand, you have the following options:

  • ask project author to rename the file/directory in question or do it yourself
  • try using git from a cygwin/msys2 build. The msys2 wrapper handles some Windows path issues, transforming them into legal ones, though I don’t know if it handles this issue.
  • fix git for windows - take into use the UNC path. The maintainer said he would consider taking such patch.
  • if you don’t really need to work on the file or directory, you could exclude it from checkout using sparse checkout.

clone失败处理(无法创建特殊文件名)

git statusgit checkout -f HEAD

修改remote仓库url

git remote set-url origin [url]

本地已有项目关联至新的Git仓库

https://blog.csdn.net/u013325929/article/details/70313414

压缩commit

https://blog.csdn.net/itfootball/article/details/44154121

https://www.jianshu.com/p/43c60db5fadb

  1. 先Rebase:
git rebase -i fb6ae281bad35fb70f15b93c22ef5ccf50ced238
  1. 修改commit注释
  2. 强推
git push -f

将很多commit压缩至几个

强行将本地的彻底替换成远程的

有时候同一个分支,远程的和本地的都被修改的面目全非了,如果想要把本地的替换成远程的,用下面的命令

git fetch --all
git reset --hard origin/master (这里master要修改为对应的分支名)
git pull

修改commit注释

git commit --amend

submodule

方法一:

git clone --recursive xxxxx

方法二:

git submodule init 

git submodule update

submodule更改仓库url

https://stackoverflow.com/questions/913701/how-to-change-the-remote-repository-for-a-git-submodule

You should just be able to edit the .gitmodules file to update the URL and then run git submodule sync --recursive to reflect that change to the superproject and your working copy.

Then you need to go to the .git/modules/path_to_submodule dir and change its config file to update git path.

If repo history is different then you need to checkout new branch manually:

git submodule sync --recursive
cd <submodule_dir> 

git fetch
git checkout origin/master
git branch master -f
git checkout master

回退相关功能

执行完commit后,撤回commit

git reset --soft HEAD^

这样就成功的撤销了你的commit

注意,仅仅是撤回commit操作,您写的代码仍然保留。

HEAD^的意思是上一个版本,也可以写成HEAD~1

如果你进行了2次commit,想都撤回,可以使用HEAD~2

至于这几个参数:

–mixed(默认)
意思是:不删除工作空间改动代码,撤销commit,并且撤销git add . 操作
这个为默认参数,git reset --mixed HEAD^ 和 git reset HEAD^ 效果是一样的。

–soft
不删除工作空间改动代码,撤销commit,不撤销git add .

–hard
删除工作空间改动代码,撤销commit,撤销git add .
注意完成这个操作后,就恢复到了上一次的commit状态。

彻底回退一个已经push到远程仓库的commit

git reset --hard a7e1d279
git push -f origin master

本地分支回滚后,版本将落后远程分支,必须使用强制推送覆盖远程分支,否则无法推送到远程分支

恢复被强推失踪的代码

Git会定时gc,清理掉reflog,所以被人覆盖后不要等待太久才进行恢复操作。

  1. 备份当前工作区的数据

  2. git reflog/git log -g

显示所有历史操作,找到你需要的提交(包括已经被删除的commit记录,git log则不能察看已经删除了的commit记录)

2.1 强制回退到当时被删除的commit

git reset --hard <SHA1>

2.2 或者直接

git cherry-pick <SHA1>

直接把当时版本的工作拿回来。不过如果有冲突的话还要处理冲突。

3.强推上远程分支

git push -f origin <branch>

如果引起commit丢失的原因并没有记录在reflog 中,比如运行了rm -Rf .git/logs/, 因为 reflog 数据是保存在 .git/logs/ 目录下的,这样就没有 reflog 了。

可以使用 git fsck 工具,该工具会检查仓库的数据完整性。如果指定 --full 选项,该命令显示所有未被其他对象引用 (指向) 的所有对象。

然后,用相同的方法就可以恢复它,即创建一个指向该 SHA 的分支。

分支相关功能

Git 切换本地分支

git checkout my-test 

合并dev至master分支

首先切换到master分支上

git checkout master

如果是多人开发的话 需要把远程master上的代码pull下来

git pull origin master

如果是自己一个开发就没有必要了,为了保险期间还是pull
然后我们把dev分支的代码合并到master上

git  merge dev

同样,dev拉取master分支

一样,在dev分支使用git merge master

查看本地分支关联的远程分支之间的对应关系

git branch -vv

一行代码直接拉下远程dev分支

git checkout -b 本地分支名x origin/远程分支名x

创建本地dev分支并关联远程dev分支

假设当前分支为master,需要创建的分支是my-test

git checkout -b my-test  //在当前分支下创建my-test的本地分支分支git branch --set-upstream-to=origin/my-test //将本地分支my-test关联到远程分支my-test上   git branch -a //查看远程分支

此时远程分支my-test已经创建好了,并且本地的分支已经关联到远程分支上
本地push代码以后会push到关联的远程分支上。

创建本地dev分支并新建远程分支

git checkout -b my-test  git push origin my-test:my-testgit branch --set-upstream-to=origin/my-test

删除分支(本地、远程)

删除本地分支:git branch -d 分支名(remotes/origin/分支名)

强制删本地:git branch -D 分支名

删除远程分支:git push origin --delete 分支名

参与评论 您还未登录,请先 登录 后发表或查看评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:Age of Ai 设计师:meimeiellie 返回首页

打赏作者

蛮三刀酱

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值