- 1.git clone 地址
- 2.git clone 地址 —depth 1
- 3.git clone 地址 —depth 1 —branch dev
- 常用命令
- 将远程 URL 从 HTTPS 切换到 SSH
- 将远程 URL 从 SSH 切换到 HTTPS
- 删除本地分支:
- 设置git提交用户信息
- git log 不能正确显示中英文
- tag 标签
- git commit 的类型
- fatal: refusing to merge unrelated histories
- 配置git bash
- 👉必要的配置
- 生成密钥对
- 添加ssh之后 git clone xxx还不行
- 切换分支
- 修改commit提交信息
- 关联远程分支
- 查看本地分支与远程分支的映射关系(查看关联效果)
- 撤销本地分支与远程分支的关系
- 合并分支
- Git本地有四个工作区域
- 重置提交
官网文档: https://git-scm.com/doc
1.git clone 地址
克隆所有文件的历史记录
2.git clone 地址 —depth 1
克隆默认分支master最近一次commit
3.git clone 地址 —depth 1 —branch dev
克隆dev分支最近一次commit
第三种方式克隆下来只存在指定的分支,如果想要切换分支
git remote set-branches origin ‘remote_branch_name’
git fetch —depth 1 origin remote_branch_name
git checkout remote_branch_name
git remote -v
查看当前地址
常用命令
显示所有提交过的用户,按提交次数排序
git shortlog -sn
显示指定文件是什么人在什么时间修改过 ```bash git blame [file]
eg: git blame README.md
<a name="en9B2"></a>### 👉本地仓库同时关联多个远端仓库(gitee, github, gitlab)因为git本身是**分布式版本控制系统**,可以同步到另外一个远程库,当然也可以同步到另外两个远程库。使用多个远程库时,我们要注意,git给远程库起的默认名称是**origin**,如果有多个远程库,我们需要用**不同的名称**来标识不同的远程库。1. 我们先删除已关联的名为origin的远程库:```bashgit remote rm origin
然后,先关联GitHub的远程库:
git remote add github git@github.com:all-smile/pc-web.git
注意: 远程库的名称叫github,不叫origin了。
接着,再关联Gitee的远程库:
git remote add gitee git@gitee.com:hey-u/pc-web.git
同样注意,远程库的名称叫gitee,不叫origin。
现在,我们用git remote -v查看远程库信息,可以看到两个远程库:
git remote -vgitee git@gitee.com:hey-u/pc-web.git (fetch)gitee git@gitee.com:hey-u/pc-web.git (push)github git@github.com:all-smile/pc-web.git (fetch)github git@github.com:all-smile/pc-web.git (push)
如果要推送到GitHub,使用命令:
git push github master
如果要推送到Gitee,使用命令:
git push gitee master

将远程 URL 从 HTTPS 切换到 SSH
- 打开 Terminal(终端)。
- 将当前工作目录更改为您的本地仓库。
列出现有远程仓库以获取要更改的远程仓库的名称。$ git remote -v
origin https://github.com/USERNAME/REPOSITORY.git (fetch) origin https://github.com/USERNAME/REPOSITORY.git (push)
使用 git remote set-url 命令将远程的 URL 从 HTTPS 更改为 SSH。$ git remote set-url origin git@github.com:USERNAME/REPOSITORY.git
- 验证远程 URL 是否已更改。$ git remote -v
- Verify new remote URL
origin git@github.com:USERNAME/REPOSITORY.git (fetch) origin git@github.com:USERNAME/REPOSITORY.git (push)
将远程 URL 从 SSH 切换到 HTTPS
- 打开 Terminal(终端)。
- 将当前工作目录更改为您的本地仓库。
列出现有远程仓库以获取要更改的远程仓库的名称。$ git remote -v
origin git@github.com:USERNAME/REPOSITORY.git (fetch) origin git@github.com:USERNAME/REPOSITORY.git (push)
使用 git remote set-url 命令将远程的 URL 从 SSH 更改为 HTTPS。$ git remote set-url origin https://github.com/USERNAME/REPOSITORY.git
- 验证远程 URL 是否已更改。$ git remote -v
- Verify new remote URL
origin https://github.com/USERNAME/REPOSITORY.git (fetch) origin https://github.com/USERNAME/REPOSITORY.git (push)
Git 中的分支是指向提交的指针,是从特定时间点开始的项目及其更改的快照。
删除本地分支:
git branch -d local_branch_name
设置git提交用户信息
github/gitlab/gitee 个人主页无法统计提交记录
git config —list
git config —global user.name “xxx”
git config —global user.email “xxx@123.com”
如何查看”.gitconfig”文件
在”Git Bash”命令行工具中输入“cd && ls -a”便可以看到如下信息
再通过“view .gitconfig”命令打开.gitconfig文件,即可查看该配置文件内容:
git log 不能正确显示中英文

git config —global core.quotepath false

git config —global core.pager more
tag 标签

git tag -a <tagname:v1.0.0> -m "标签描述"# 将tag显示的推送到远程仓库git push origin v1.0.0#-------------------# 打 tag (tag指向commit ID)git tag -a <tagname:v1.0.0> -m "标签描述"eg: git tag -a v1.0.0 -m "test"# 推送taggit push github v1.0.0git push gitee v1.0.0# 获取taggit tag# 删除本地`tag`git tag -d 标签名eg:git tag -d v3.1.0# 删除远程`tag`git push origin :refs/tags/标签名eg:git push origin :refs/tags/v3.1.0
更新tag(不建议使用)
git tag -a -f <tag名称> <新的commit ID>
git commit 的类型
- feat: 新功能、新特性
- fix: 修改 bug
- perf: 更改代码,以提高性能
- refactor: 代码重构(重构,在不影响代码内部行为、功能下的代码修改)
- docs: 文档修改
- style: 代码格式修改, 注意不是 css 修改(例如分号修改)
- test: 测试用例新增、修改
- build: 影响项目构建或依赖项修改
- revert: 恢复上一次提交
- ci: 持续集成相关文件修改
- chore: 其他修改(不在上述类型中的修改)
- release: 发布新版本
- workflow: 工作流相关文件修改
https://zhuanlan.zhihu.com/p/276458191
fatal: refusing to merge unrelated histories
git pull 的时候报错 拒绝合并无关历史记录
粗暴解决:
使用强制命令git pull origin master --allow-unrelated-historie
配置git bash
1。vscode配置bash
右键git bash here
执行命令: where bash : 获取bash应用程序路径
- vs中打开设置,搜索 shell,选择Automation Shell: Windows, 在setting.json中编辑
- 添加配置项
“terminal.integrated.shell.windows”: “填写获取到的bash路径”,
“terminal.integrated.automationShell.windows”: “填写获取到的bash路径”
where bash 命令在安全账户(多账户下)有兼容问题
去掉usr路径
D:/Git/usr/bin/bash.exe -> D:/Git/bin/bash.exe
👉必要的配置
git config --global user.name "xxx"git config --global user.email "xxx@123.com"git config --global core.autocrlf false // 不同平台mac/windows/linux下换行符(\n, \r\n, \r)不一致的问题git config --global core.longpaths truegit config --global core.quotepath falsegit config --global i18n.logoutputencoding utf-8git config --global i18n.commitencoding utf-8git config --global gui.encoding utf-8echo "export LANG=zh_CN.UTF-8" >> ~/.bash_profileecho "export LESSCHARSET=UTF-8" >> ~/.bash_profile
换行符问题
参考另一篇: https://www.yuque.com/allblue-byynd/izub4k/osk3wg
上面的都是通过规范个人的行为来保持版本库的统一,但团队开发中还是会有人不遵守规范,导致出现一些问题,所以最终的处理方案应该是跟随项目提供一个配置文件(.gitattributes),并且给以最高的优先级(像eslint配置一样),这里提供了一系列针对各种开发环境,已经写好了的 .gitattributes 文件。
参考: https://www.jianshu.com/p/fa4d5963b6c8
参考另一篇详解: https://www.yuque.com/allblue-byynd/izub4k/za3qkt
- .gitattributes 具有最高的优先级,无论你是否设置相关的换行符风格转化属性,你都可以和团队保持一致;
- 使用 * text=auto 可以定义开启全局的换行符转换;
- 使用 *.bat text eol=crlf 就可以保证 Windows 的批处理文件在 checkout 至工作区时,始终被转换为 CRLF 风格的换行符;
- 使用 *.sh text eol=lf 就可以保证 Bash 脚本无论在哪个平台上,只要被 checkout 至工作区,始终被保持 LF 风格的换行符;
- 使用 *.jpg -text 可以禁止 Git 将 jpg 文件识别为文本文件,从而避免由于换行符转换引入的数据损坏;
| Windows | Linux/Mac | Old Mac(pre-OSX) |
|---|---|---|
| CRLF | LF | CR |
| ‘\n\r’ | ‘\n’ | ‘\r’ |
Windows 提交时转换为LF,检出时转换为CRLF
git config --local core.autocrlf true
生成密钥对
右键 git bash
ssh-keygen -o -t rsa -C “your.email@example.com” -b 4096
一路回车
拷贝公钥到剪切板
cat ~/.ssh/id_rsa.pub | clip
登录gitlap配置公钥
多个github账号下,生成的key不能同时在两个github下面使用,导致添加失败:Key is already in use

这时候在执行ssh-keygen -o -t rsa -C “your.email@example.com” -b 4096命令的时候就不能默认回车了
可以修改生成key的文件名,默认文件名是id_rsa,生成多个不同文件命名的key就可以添加使用了。
添加ssh之后 git clone xxx还不行
尝试一:
配置ssh config
# gitcode - csdnHost gitcode.netHostName gitcode.netPreferredAuthentications publickeyIdentityFile ~/.ssh/gitcode# gitlabHost gitlab.comHostName gitlab.comPreferredAuthentications publickeyIdentityFile ~/.ssh/gitlab-rsa# githubHost github.comHostName github.comPreferredAuthentications publickeyIdentityFile ~/.ssh/id_rsa# giteeHost gitee.comHostName gitee.comPreferredAuthentications publickeyIdentityFile ~/.ssh/id_rsa# 公共配置# Host *# key value# 其它密钥对说明# 18143945157 : github-cli 使用的# gh-pages : hexo deploy_key 设置
再次测试连接
ssh -T git@gitlab.com
尝试二
ssh-keygen -R 你要访问的IP地址ssh-keygen -R git@gitlab.com:all-smile/gitbook.gitHost git@gitlab.com:all-smile/gitbook.git not found in /c/Users/xiao/.ssh/known_hosts
修改 known_hosts 的文件名字,也就是让它不起作用。(host)
重新clone ,生成新的 known_hosts
ping gitlab.com
切换分支
1.将远端分支拉取到本地(本地切换到远程分支,存在远端分支,需要在本地)
git checkout -b dev origin/dev
2.创建远程分支(本地新建分支,推送到远端)
删除本地分支
git branch -d
修改commit提交信息
情况一、修改最后一次的提交信息
git commit —amend
然后再vim编辑器里面修改保存即可
git push
情况二、修改指定commit的提交信息
https://blog.csdn.net/qidi_huang/article/details/61915654
git log 查看信息,获取到commmit-id
git rebase -i 6579ghjk^
变基到指定的commit-id版本, 并进入到一个可编辑的界面。在编辑区顶部,会列出这次 rebase 操作所涉及的所有 commit 提交记录的摘要,它们每一行默认都是以 pick 开头的。找到你想要修改的那个 commit,将行首的 pick 关键字修改为 edit。然后保存并退出。这么做可以在执行和指定 commit 有关的 rebase 操作时暂停下来让我们对该 commit 的信息进行修改
git commit —amend 修改commit信息
执行 git rebase —continue 命令完成剩余的 rebase 操作。
如果需要修改多个提交记录的信息,则重复执行 2、3步骤,直到出现以下输出:
$ git rebase --continueSuccessfully rebased and updated refs/heads/develop
到这里已经完成了变基操作的所有节点,
执行 git log 命令查看我们刚才的修改情况,确认已修改的内容和预期一致。
git push
关联远程分支
将本地新建的分支与远程分支相关联(在当前分支下输入以下命令)
git branch -u origin/分支名 其中origin/xxx xxx为远程分支名
eg: git branch -u origin/master 本地分支关联远程master分支
或者使用 git branch —set-upstream-to origin/xxx 同样可以关联
查看本地分支与远程分支的映射关系(查看关联效果)
撤销本地分支与远程分支的关系
合并分支
git checkout master //切换到master分支上
git pull origin master //把远程分支pull下去,及时更新
git merge dev //把dev分支的代码合并到master上
git status // 查看状态
git push origin master //push到远程分支
Git本地有四个工作区域
工作目录(Working Directory)、暂存区(Stage/Index)、资源库(Repository或Git Directory)、git仓库(Remote Directory)。文件在这四个区域之间的转换关系如下
- Workspace: 工作区,就是你平时存放项目代码的地方
- Index / Stage: 暂存区,用于临时存放你的改动,事实上它只是一个文件,保存即将提交到文件列表信息
- Repository: 仓库区(或版本库),就是安全存放数据的位置,这里面有你提交到所有版本的数据。其中HEAD指向最新放入仓库的版本
- Remote: 远程仓库,托管代码的服务器,可以简单的认为是你项目组中的一台电脑用于远程数据交换
重置提交
情况一、没有push到远程的情况(只是在本地commit)
git reset --soft|--mixed|--hard <commit_id>git push develop develop --force (本地分支和远程分支都是 develop)
—mixed 为默认,可以不用带该参数,用于重置暂存区的文件与上一次的提交(commit)保持一致,工作区文件内容保持不变。只是将git commit和index 信息回退到了某个版本。
—soft 保留源码,只回退到commit信息到某个版本.不涉及index的回退,如果还需要提交,直接commit即可。
git reset —soft HEAD
—hard 参数撤销工作区中所有未提交的修改内容,将暂存区与工作区都回到上一次版本,并删除之前的所有信息提交。
情况二、已经push到远程的情况
对于已经把代码push到线上仓库,你回退本地代码其实也想同时回退线上代码,回滚到某个指定的版本,线上线下代码保持一致,你要用到下面的命令
git revert <commit_id>
revert 之后你的本地代码会回滚到指定的历史版本,这时你再 git push 既可以把线上的代码更新。
git revert是用一次新的commit来回滚之前的commit
HEAD 说明:
- HEAD 表示当前版本
- HEAD^ 上一个版本
- HEAD^^ 上上一个版本
- HEAD^^^ 上上上一个版本
- 以此类推…
可以使用 ~数字表示
- HEAD~0 表示当前版本
- HEAD~1 上一个版本
- HEAD^2 上上一个版本
- HEAD^3 上上上一个版本
- 以此类推…


