文章目录
- Git初识
- Git命令(常用)
- 重命名默认分支 master
- 基础命令
- 主干和分支
- 发布版本
- 版本切换 & 重设 & 撤销
- commit提交规范
- 常见问题整理
- git上传配置
- 解决git文件名大小写问题
- git 在pull或者合并分支的时候有时会遇到下图这个界面
- git克隆项目报错cannot create directory at xxx,filename too long
- 利用`git commit —amend —no-edit`命令修改上一次变更内容
- git修改历史提交 commit 信息
- 生成密钥和查看密钥
- 报错missing change id in commit message
- git在使用中出现 refusing to merge unrelated histories如何解决?
- 需要Pull自己和公司的项目(不同github账号)
- 配置快捷命令
- sourceTree的遴选(把旧分支提交的几个commit 转移到新分支上)
- 强制回退
- 跳过husky钩子检查
- Git提交代码解决报错
- 常见的DOS命令-cmd
Git初识
git : 进行了版本的控制,分布式版本代码管理工具
gitHub :开源的代码分享的平台;每个gitHub账号都可以将自己的资源提交到gitHub上,gitHub充当一个服务器的角色;如果需要gitHub上的资源,直接从gitHub下载;
-
git : 分布式版本代码管理工具
-
git工作原理
- 工作区:我们能看到的,平时用来写代码的地
- 暂存区:历史存储用的
- 历史区:生成历史版本
git的使用(全局配置)
git的全局的配置只需要配置一次就好(git第一次安装完成后,我们在全局环境下基本信息)
- 1、配置全局基础信息
- git config -l (查看全局配置信息) 【报错不用管,直接输入用户名和邮箱】
git config --global user.name ‘xxx’
git config --global user.email ‘xxx@xxx.xxx’
-------------到目前为止输入git config -l要出来用户名和邮箱-------
- git config -l (查看全局配置信息) 【报错不用管,直接输入用户名和邮箱】
- 2、创建仓库,完成版本控制
- 1、创建本地仓库 :让本地文件夹初始化一个git仓库;
git init(会生成一个隐藏文件夹,不能删除,仓库里边的所有信息都在这里边)【mac的在终端输入shift+cmmand+. 直接显示】- git仓库分三个区: 工作区 暂存区 历史区
- 工作区: 就是你电脑磁盘上的文件
- 2、在本地工作区编写完成代码之后,把代码提交到暂存区
git add xxx (把工作区指定的文件提交到暂存区)
git add . (把工作区所有修改的文件提交到暂存区)
git add -A (把工作区所有修改的文件提交到暂存区)
git status (查看当前文件提交状态) 【红色代表在工作区;绿色代表在暂存区;看不见东西代表所有东西已经提交到历史区】 - 3、把暂存区的内容提交到历史区
- git commit -m’描述信息’ (描述信息是本次提交的一个描述)
- git log 查看当前历史区提交的版本号
- git reflog 包含回滚的历史信息
- 4、github 网址:github 网址
一个网站(一个开源的源代码管理平台),用户注册后,可以在自己的账户下创建远程仓库,用来管理自己的源代码(代码是基于git传到远程仓库中)
我们所熟知的插件、类库的源码在这个平台上都有所托管(我们可以下载、查看- 1、在头像下的Settings
- Profile:设置昵称、公开的邮箱、简介、头像
- account:设置用户名(登录名)、
- security:修改密码
- 2、创建仓库
- new repository
- publice:创建一个开源的仓库
- peivate:私有仓库作为团队内部开发
- 填写信息
- create repository
- 仓库的settings
- delete this repository(删除库)
- Collaborators 设置仓库的管理者
- 3、把本地仓库的代码提交到远程仓库
- 本地仓库和远程仓库建立连接
- git remote -v (查看本地仓库和远程仓库的连接状态)
- git remote add origin git仓库地址 (让本地仓库和远程仓库建立连接) origin是随便起的连接名(可以改,不过一般大家都叫这个名字)
- git remote rm origin (删除连接状态)
- 向远程仓库提交代码(提交之前先拉取代码)
- git pull origin master (拉取代码,把远程仓库代码拉取到本地)
- git push origin master (推送代码,把本地代码推送到远程)
- 4、git clone 远程仓库git地址 本地仓库名
- 其实在真正开发的时候我们用的都是git clone
- 小组成员基于 git clone 把仓库克隆到本地(一步就干三件事:git init、git remote add、git pull)
- 1、在头像下的Settings
- 1、创建本地仓库 :让本地文件夹初始化一个git仓库;
Git命令(常用)
- 别忘打空格
重命名默认分支 master
- 重命名master为main
- 新存储库main用作默认分支名称
- github 重命名 相关
基础命令
git --version (查看git版本)
git config -l (查看全局的基础信息)
git config --global user.name ‘xxx’ 绑定GitHub//git config --global user.name ‘Github名’
git config --global user.email ‘xxx@xxx.xxx’ 绑定GitHub邮箱 //git config --global user.email ‘邮箱名’
git init:初始化一个空的git仓库 【.git一开始隐藏,在查看打开隐藏的项目,.git这个文件不能删除,删除就不是仓库了】
git status 检查仓库中的文件状态【红色代表工作区,绿色暂存区,没有证明在历史区】
git add 文件名 (把指定文件提交到暂存区)
git add . (把全部文件提交到暂存区)
git add -A (把全部文件提交到暂存区)
git commit -m’注释’ (本文件提交到历史区,注释就是你这次提交的描述信息)
git log 查看历史版本信息
git reflog (查看历史版本信息)
git remote (查看所有远程主机)
git remote rm origin (移除远程主机,远程主机名字 origin)
git remote -v (查看远程仓库和本地仓库的关联状态)
git remote add origin 仓库地址 将本地仓库同步,连接到远程仓库
git remote rm origin 仓库地址 (删除连接状态)
git pull origin master :拉取远程仓库的代码到本地,使本地与远程仓库的代码同步 拉过来
git push origin master :将本地仓库的内容与远程仓库同步 推过去
git clone GitHub仓库地址 (将远程的仓库下载到本地)—相当于 (git init、git remote add 、git pull)
git clone :将远程仓库下载到(当前 git bash 启动位置下面的)指定文件中,如果没有会自动生成
git reset --hard HEAD^ :回退版本信息
(HEAD^:一个版本 HEAD~50 五十个版本)
git reset --hard HEAD^1
git reset --hard f65a9d11b629315659fdb
git stash:临时将工作区文件的修改保存至堆栈中
git stash list ; 列出储藏内的所有列表;
git stash pop:将之前保存至堆栈中的文件取出来
git stash apply: 还会保留历史堆栈中的记录
git stash drop stash@{0} 这是删除第一个队列
主干和分支
git branch:查看本地分支
git branch -a 查看所有分支(本地分支+远程分支)
git branch 分支名:创建新分支
git checkout 分支名:切换到分支
git checkout -b 分支名:创建并切换分支
git checkout -b dev(本地分支名) origin/dev(远程分支名): 拉取远程分支,并创建本地分支
git pull origin dev 把dev支干内容pull下来 orgin 默认的仓库名
git branch -D(d高版本小写也可以) 分支名:删除分支
当更改了分支的文件时,主干代码不会更新
git merge 分支名;把分支的代码合并到主干上;
git merge dev 把dev合并到当前右侧显示(主干或分支)下
发布版本
- tag 常用于发布版本
# 默认在 HEAD 上创建一个标签
$ git tag v1.0
# 指定一个 commit id 创建一个标签
$ git tag v0.9 f52c633
# 创建带有说明的标签,用 -a 指定标签名,-m 指定说明文字
$ git tag -a v0.1 -m “version 0.1 released”
# 查看所有标签
# 注意:标签不是按时间顺序列出,而是按字母排序的。
$ git tag
# 查看单个标签具体信息
$ git show
# 推送一个本地标签
$ git push origin
# 推送全部未推送过的本地标签
$ git push origin --tags
# 删除本地标签
# 因为创建的标签都只存储在本地,不会自动推送到远程。
# 所以,打错的标签可以在本地安全删除。
$ git tag -d v0.1
# 删除一个远程标签(先删除本地 tag ,然后再删除远程 tag)
$ git push origin :refs/tags/<tagname> 比如删除标签v1.3.0:git push origin :refs/tags/v1.3.0
版本切换 & 重设 & 撤销
- checkout 可以撤销工作区的文件,reset 可以撤销工作区/暂存区的文件
reset 详解
- git reset --soft (将当前分支的指针指向为指定 commit(该提交之后的提交都会被移除),但保持暂存区和工作区不变)
- git reset --soft head~1 (表示回退1个版本)
- git reset --hard origin/master # 将本地的状态回退到和远程的一样
commit提交规范
-
message 格式
<type>[optional scope]: <subject>
[optional body]
[optional footer(s)] -
eg: git commit -m “feat: 开发新功能”
-
type 用来描述本次提交的改动类型,可选值及对应含义如下:
build:主要目的是修改项目构建系统(例如 glup,webpack,rollup 的配置等)的提交
ci:主要目的是修改项目继续集成流程(例如 Travis,Jenkins,GitLab CI,Circle等)的提交
docs:文档更新
feat:新增功能
merge:分支合并
fix:bug 修复
perf:性能, 体验优化
refactor:重构代码(既没有新增功能,也没有修复 bug)
style:不影响程序逻辑的代码修改(修改空白字符,格式缩进,补全缺失的分号等,没有改变代码逻辑)
test:新增测试用例或是更新现有测试
revert:回滚某个更早之前的提交
chore:不属于以上类型的其他类型 -
代码库中配套工具
- commitlint-config-ali:本规约配套的 commitlint 配置包,可用于校验 commit message。
-
或者采用表情代替
- Git提交添加Emoji图标
- vscode Git CZ Emoji 插件 也可以
常见问题整理
git上传配置
git上传忽略node_modules目录
- 在项目的根目录,右键选择 Git Bash 进入命令行;
- 输入 touch .gitignore
- 生成 .gitignore 文件;
- 在文件中输入过滤信息,过滤规则如下,需要可以自行搜索:
- node_modules/ 表示过滤这个文件夹
- *.zip 过滤zip后缀文件
- demo.html 过滤该文件
解决git文件名大小写问题
- 在windows下,一开始提交了一个planSetList.vue文件,后来把它重命名为PlanSetList.vue再次提交,GitLab库里的文件还是小写没有改动,原来git默认对文件名的大小写不敏感。
- 解决方案
- 设置git库为大小写敏感(不建议)
git config core.ignorecase true //默认为 true
git config core.ignorecase false //在git本地库使用这条指令就可以识别大小写,修改完提交后再修改回来 - 使用git mv命令(仅当core.ignorecase为true时可用)
改名工作区/暂存区的文件
$ git mv [file-original] [file-renamed]
$ git status
$ git commit
git 在pull或者合并分支的时候有时会遇到下图这个界面
可以不管(直接下面3,4步),如果要输入解释的话就需要:
- 按键盘字母 i 进入insert模式;
- 修改最上面那行黄色合并信息,可以不修改 // 黄色内容为默认的合并信息;
- 按键盘左上角"Esc";
- 输入":wq",进行修改后保存退出,然后按回车键即可。
- git commit 也可以进入类似这个窗口,添加多行修改内容,操作流程同上
git克隆项目报错cannot create directory at xxx,filename too long
- filename too long解决方案
- git config --global core.longpaths true 全局
- git config core.longpaths true 当前仓库
利用git commit —amend —no-edit
命令修改上一次变更内容
- 在执行git commit --amend --no-edit之后,hash值由xxxx变成了xxxxxx,但是message内容并没有发生变化,并且最重要的是只有一条commit记录。
- 如果要修改上一条的message,那么去掉–no-edit选项即可,git commit --amend -m “xxxx”。同理,commit记录同样只会有一条。
- 示例
- git reflog 中的记录
- git log 中的记录
git修改历史提交 commit 信息
- 修改最后一次commit的信息
- git commit --amend 进入命令模式,然后按i进入编辑模式,我们修改好commit信息后,按Esc健退出编辑模式,然后:wq保存我们编辑的信息
- 或者直接用指令
修改最后一次提交的 commit 信息 git commit --amend --message="moxify mesxgotest" --author="xaxhx<xxx@xx.com>" 仅修改 message 信息 git commit --amend --message="mxxxoda oxxxt" 仅修改 author 信息 git commit --amend --author="zhainanya <xxx@xx.com>"
- 修改最近两个或者两次上的历史commit信息
- 先查看你要修改的commit 信息
- git log 查看当前历史区提交的版本号
- git reflog 包含回滚的历史信息
- 然后git rebase -i HEAD~2 或者两次以上 找到前几次之前提交的commit
- 修改的commit id 对应的commit 信息,对应的pick改成e或者edit。按Esc健退出编辑模式,然后:wq保存我们编辑的信息
- git commit --amend
- git rebase --continue
- git push
#最近 2 条 git rebase -i HEAD~2 vi 下,找到需要修改的 commit 记录,```pick```修改为 ```edit```或 ```e```,```:wq```保存退出 重复执行如下命令直到完成 $ git commit --amend --message="xxxxxx" --author="zhainanay <zhainanay@xx.com>" $ git rebase --continue 中间也可跳过或退出 rebase 模式 $ git rebase --skip $ git rebase --abort
生成密钥和查看密钥
- 生成密钥
ssh-keygen -t rsa -C "上面的邮箱" 注:执行上面命令后,连续回车3次
- 查看密钥
cd ~/.ssh cat id_rsa.pub
- 检查秘钥
ssh -T -v git@github.com
- 先查看你要修改的commit 信息
报错missing change id in commit message
-
克隆代码库的时候没有安装commit-msg hook导致
-
或者commit change id 位置不对
如果上面不行,试试这样 根路径打开git Bash here 1.删除hooks文件 rm .git/hooks 2.创建hooks目录 mkdir .git/hooks 3.安装hook scp -p -P 8235 {用户名}@icode.baidu.com:hooks/commit-msg $(git rev-parse --git-dir)/hooks 4.git reset --soft head~1 或者 git reset --soft origin/[branchname] 后重新commit)
git在使用中出现 refusing to merge unrelated histories如何解决?
因为他们是两个不同的项目,要把两个不同的项目合并,git需要添加一句代码,在git pull,
这句代码是在git 2.9.2版本发生的,最新的版本需要添加–allow-unrelated-histories
git pull origin master --allow-unrelated-histories需要Pull自己和公司的项目(不同github账号)
- 需要pull自己和公司的项目,如果你不进行配置用户名和邮箱的话, 则会使用全局的, 这个时候会有一个是错误的.
- 可以针对其中项目, 在项目根目录下进行单独配置
- git config user.name “gitlab’s Name”
- git config user.email “gitlab@xx.com”
- git config --list
- git config --list查看当前配置, 在当前项目下面查看的配置是全局配置+当前项目的配置, 使用的时候会优先使用当前项目的配置
配置快捷命令
- 快捷命令
```
git config --global alias.st status //git status 简化 git st
git config --global alias.co checkout //git checkout 简化 git co
git config --global alias.ci commit //git commit 简化 git ci
git config --global alias.br branch //git checkout 简化 git br
git config --global alias.rg reflog
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"
```
- icode提交审核技巧
```
git config --global alias.gpush '!f() { : push ; r=$1; [[ -z $r ]] && r=origin; b=$2; t=$(awk "{ print \$2 }" $(git rev-parse --git-dir)/HEAD); t=${t#refs/heads/}; [[ -z $b ]] && b=$t; cmd="git push $r HEAD:refs/for/$b%topic=$t"; echo $cmd; echo; $cmd; }; f'
```
sourceTree的遴选(把旧分支提交的几个commit 转移到新分支上)
- cherry-pick
将指定的提交 commit 应用于当前分支(可以用于恢复不小心撤销(revert/reset)的提交)
$ git cherry-pick <commit_id>
$ git cherry-pick <commit_id> <commit_id>
$ git cherry-pick <commit_id>^..<commit_id>
强制回退
git reset --hard 514d05ac284xxxxxe13ff26ea1
git push origin HEAD --force
跳过husky钩子检查
git push --no-verify
Git提交代码解决报错
- pre-commit 报错
.git/hooks/pre-commit: line 2: ./node_modules/_pre-commit@1.2.2@pre-commit/h
// 执行以下命令,回车即可 npx husky install
常见的DOS命令-cmd
打开cmd的方式
1.找到文件夹路径,在文件资源路径的位置输入cmd,然后回车;在此文件夹中操作文件或是内容;
2.window+R: 快捷打开DOS窗口;
3.在搜索框中输入cmd,然后回车;
dos指令
• cd …/ 返回上一级
• cd + 文件夹: 打开对应的文件夹:该文件夹必须在该目录下,否则系统找不到该路径
• F: 区: 换区操作
• win+R 快速打开DOS窗口
• cd \ 返回到根路径
• mkdir + 文件名 创建一个文件夹
• cls 清空命令行