前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Git常用命令速查手册【蛮三刀酱出品】

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

作者头像
蛮三刀酱
发布2022-01-05 15:51:38
3870
发布2022-01-05 15:51:38
举报

前言

在你日常的开发中,会遇到很多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 分支名

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2021-12-16 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
    • 文章目录
    • 常规功能
      • Git Commit 规约
        • git忽略已经管理的文件及文件夹
          • 如何使用特定的SSH Key提交GIT
            • Git全局username和当前项目username
              • Global Config 和 仓库Config
                • 修改已经提交的作者信息
                  • Git打tag Tag推送到远程仓库
                    • Windows无法创建文件名
                      • clone失败处理(无法创建特殊文件名)
                        • 修改remote仓库url
                          • 本地已有项目关联至新的Git仓库
                            • 压缩commit
                              • 将很多commit压缩至几个
                                • 强行将本地的彻底替换成远程的
                                  • 修改commit注释
                                    • submodule
                                      • submodule更改仓库url
                                      • 回退相关功能
                                        • 执行完commit后,撤回commit
                                          • 彻底回退一个已经push到远程仓库的commit
                                            • 恢复被强推失踪的代码
                                            • 分支相关功能
                                              • Git 切换本地分支
                                                • 合并dev至master分支
                                                  • 查看本地分支关联的远程分支之间的对应关系
                                                    • 一行代码直接拉下远程dev分支
                                                      • 创建本地dev分支并关联远程dev分支
                                                        • 创建本地dev分支并新建远程分支
                                                          • 删除分支(本地、远程)
                                                          领券
                                                          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档