携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第 8 天,点击查看活动详情
start
- 有些历史原因,导致我潜意识的就会觉得 git 很难;
- 今天就再简单过一遍 git ,以及记录一下我暂时遇到的一些小问题;
基础的命令
1. 基本信息
# 配置用户名
git config --global user.name "tomato"
# 配置用户邮箱
git config --global user.email "6559210+lazy_tomato@user.noreply.gitee.com"
- 翻译一下:
git 配置 --全局 用户邮箱:'XXX'- 只想给当前项目设置用户名和邮箱,去掉 ``--global` 即可
- 查看当前配置
git config --list(windows)
2. 初始化以及状态
# 初始化 生成一个 .git文件夹
git init
# 查看文件状态
git status
以极简的方式显示文件状态:git status -s
A:本地新增的文件(服务器上没有)C:文件的一个新拷贝D:本地删除的文件(服务器上还在)M:红色为修改过未被添加进暂存区的,绿色为已经添加进暂存区的R:文件名被修改T:文件的类型被修改U:文件没有被合并(你需要完成合并才能进行提交)X:未知状态(很可能是遇到git的bug了,你可以向git提交bug report)?:未被git进行管理,可以使用git add fileName把文件添加进来进行管理
3. 暂存
# 所有文件暂存
git add .
# 暂存 1.txt
git add ./1.txt
4. 提交到本地仓库
git commit -m '第一次提交'
5. 分支操作
5.1 创建分支
git branch 分支名
5.2 查看分支
git branch -v
# or
git branch -a
5.3 切换分支
git checkout 分支名
5.4 合并分支
# 把分支a合并到当前所在分支
git merge 分支a
# 如果合并有冲突,需要手动搜索 >>>>>> 手动合并
6. 查看日志
# git reflog 可以查看所有操作记录,包括已删除记录,git log不能查看已删除记录
git reflog
git log
- 将每条历史提交记录展示成一行:
git log --oneline或git log --pretty=oneline
7. 回退版本
git reset [--soft | --mixed | --hard] [HEAD]
8. 管理远程仓库
# 查看所有关联的远程仓库信息
git remote -v
# 定义 <远程仓库别名> 替代 <远程仓库地址> ;远程仓库别名习惯用origin
git remote add <远程仓库别名> <远程仓库地址>
# 查看关联的远程仓库的详细信息
git remote remove <远程仓库别名>
9. 推送
git push 别名 分支
10. 拉取
# 同步远程仓库上master分支的更新
git fetch origin master
# 拉取远程分支代码,再与本地分支合并
git pull 远程库地址别名 远程分支名
git fetch origin master:test拉取远程的master代码到本地的test分支
11. 克隆
git clone 远程地址
# clone 会做如下操作 1、拉取代码。2、初始化本地仓库。3、创建别名
记录一下我遇到过的问题
1.包含LF ,CRLF的 git 警告。
问题
有时候我们本地git add . 会弹出一堆警告。虽然警告不影响使用,但是想搞清楚这个警告是为什么。
# 警告:在XXX-mobile/libs/icon-font/iconfont.svg中,LF将被CRLF取代。
warning: LF will be replaced by CRLF in XXX-mobile/libs/icon-font/iconfont.svg.
# 在您的工作目录中,该文件将具有其原始行结束符
The file will have its original line endings in your working directory
思考
CRLF是回车换行的意思,Carriage Return Line Feed,指的是 Windows 的换行符,同\r\n
LF 是换行意思,Line Feed,指的是 Unix 的换行符,同\n
git 有这么一个默认配置,core.autocrlf true,可以这样理解:是否自动将 LF 格式的回车转换成 CRLF 格式:true
总结:
- 建议是: 设置编辑器默认换行为 LF。 关闭 git 自动转换的配置
core.autocrlf false; - 为了验证换行的问题,我在
linux系统上通过命令cat -A 文件名,分别查看了两个系统文件的回车。- windows:
^M$ - linux:
$ - (在实验的过程中还看到了这么一个字符
^I,是代表tab键缩进)
- windows:
2.TLS certificate verification has been disabled!
warning: ----------------- SECURITY WARNING ----------------
warning: | TLS certificate verification has been disabled! |
warning: ---------------------------------------------------
warning: HTTPS connections may not be secure. See https://aka.ms/gcmcore-tlsverify for more information.
info: detecting host provider for 'https://gitee.com/'...
warning: ----------------- SECURITY WARNING ----------------
大概意思就是 缺少了安全认证,解决办法:
git config --global http.sslVerify true
获取或推送HTTPS时,是否验证SSL证书。默认值为true。可以由GIT_SSL_NO_VERIFY环境变量重写。
3.git branch -a 看不了全部的分支(包含远程分支)?
需要使用 git fetch同步一下最新的所有远程信息 ;
git fetch将所有的远程分支, 所包含分支的最新commit-id, 将其记录到.git/FETCH_HEAD文件中
4.不会回退分支(又或者说不敢回退分支)
这种情况是有时候操作生产环境的代码,操作起来总会畏手畏脚。
如果你也有这种情况,不拖延,现在就学+练习,实际操作一次理解了就不慌了
4.1 仅本地 commit
# 1. 查看当前分支的提交信息 以一行信息展示===> 用来获取到提交的唯一标识 commitId
git log --oneline
# 2. 重置
git reset --soft afc0f17
参数有三种情况--soft,--mixed,--hard;按照单词的翻译来看。分别是: 软的,混入,硬的;所以对应的回退效果不一样。
--soft:最新的修改文件存在,存储在暂存区; (回退到某个版本,只回退了commit)--mixed:最新的修改文件存在,存储在工作区; (回退到某个版本,commit 和 add 都会回退)--hard:最新的修改文件不存在,代码以你回退的版本为主。(彻底回退到某个版本,源码也会回到那个版本的状态)
最新的修改文件:回退目标版本 之后的所有修改的内容
4.2.已经push到远程分支了
# 1. 备份本地分支(以防回滚出问题)
git branch 备份分支名
# 2. 将备份分支提交到远程
git push origin 备份分支名:备份远程分支名
# 3. 先将本地仓库重置
# 在进行下一步操作之前你需要:① git checkout 你需要回退的分支;② git log 查看你要回滚的版本号
git reset --hard xxxxxxx --回滚本地分支
# 4.强制提交 (如果不强制提交,它会提示你先pull分支再做提交。)`-f` 是 `--force`的简写
git push -f origin 需要回退的远程分支名
4.3 revert
除了reset,还可以使用 revert来撤销一次提交达到回退代码的目的。
git revert 需要撤销的commitId
# 可能会存在冲突 需要手动解决,然后重新 add commit,最后push即可
reset 和 revert的区别:
-
git revert 后会多出一条commit,这里可进行回撤操作
-
git reset 直接把之前 commit 删掉,非 git reset --hard 的操作是不会删掉修改代码,如果远程已经有之前代码,需要强推 git push -f
end
- 加油!