携手创作,共同成长!这是我参与「掘金日新计划 · 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
- 加油!