代码库 - git管理工具
引导目录
安装git
3种状态
分别为:工作区、暂存区、Git仓库。
命令查询(git status)
Changes not staged for commit
:被修改,待添加到缓冲区(add)Changes to be committed
:暂存(缓冲)区,待提交(commit)Untracked files
:新建的文件,未被监管,首次添加
文件标注
-
M: 文件内容或者mode被修改了,最常见
-
U: 新增文件,未添加到暂存区
-
A: 新增文件,已添加到暂存区
-
D: 已经被删除的文件,一般显示在提交记录中
基本命令
-
git init
:初始化 -
git clone 远程仓库链接
:首次检出 clone -
git add 文件名
:添加暂存(缓冲)区(状态A),.
是所有文件, -
git commit -m
: 提交 暂存区=>本地仓库,提交规则忽略加 --no-verifygit commit -m "feat:提交日志信息" // feat是提交类型,见下文 git commit -m "feat:提交日志信息" --no-verify
-
git pull
:拉取,远程仓库→本地仓库 -
git push
:推送,本地仓库→远程仓库,
语法:git push < remote > < branch >
< remote > 表示远程仓库名字,一般默认名字为 origin;
< branch > 表示要推送的分支,这里是 master 分支。所以完整的命令如下:git push origin master
-
git checkout -b 分支名称
:创建并切换-
git branch testing:仅创建
-
git checkout testing:切换
-
-
本机全局 git 用户名设置:git config --global user.name “用户名”
-
本机全局 git 邮箱设置: git config --global user.email “email” ,
-
查看全局用户名、邮箱 或其他信息:git config --list
-
针对单个项目设置 git 提交信息:.git\config中配置,如下:
[user]
name = 666
email = 123666@163.com
git config --list:也可以打开全局配置文件gitconfig文件查看,如果没有针对项目设置信息,默认使用全局用户信息
进阶命令
-
git branch -a
:所有分支 -
git branch -d 分支名称
:删除本地指定分支 -
git branch orgin --delete 分支名
:删除指定远程分支 -
git push --set-upstream origin 远程分支
:推送至远程 -
git branch --set-upstream-to=origin/远程分支名称
:关联远程分支(不存在则创建) -
git branch -u origin/远程分支名称
:本地关联远程已存在的分支 -
git branch --unset-upstream
:取消本地和远程分支的关联 -
git branch -vv
:查看本地/远程分支情况,映射情况, *为当前分支 -
git branch
:本地分支列表 -
git branch -r
:远程分支列表 -
git branch --merged 当前分支
:列出合并到当前的分支 -
git branch --merged master
:只列出已经合并到master的分支 -
git log
:详细操作信息(不含删除等)–pretty=oneline,简化信息 -
git reflog
:简化的所有分支所有信息,包括被删除的版本或者回退 -
git merge a
:a分支合并到当前分支 -
git reset --hard 版本号
:版本回退 -
git -v
:版本查看 -
git push -f orgin 远程分支名
:强制推送 -
git status
:查看文件状态, -
git stash
:工作区暂存,跨分支工作 -
git diff dev master --stat
或者git log dev ^master
:分支差异比较-
如果没有输出,通常为没有差异, 退出查看状态:英文q退出
-
git diff dev master --stat file.txt
: 加文件名,能够查看 file.txt 这个文件在两个分支之间的差异摘要信息
-
-
git log master..dev # since..until
,包含了在dev分支而不在master分支中所有的提交,若无结果,说明一致
常用提交类型
严格程度根据项目提交要求定,甚至可以没有要求。严格情况下,不符合要求会导致提交(push)失败
- 语法:git commit -m type: description
- type : commit 的类别
- description:提交信息描述,推荐以动词开头,如: 设置、修改、增加、删减、撤销等
type 常用类型
- feat : 新功能
- fix : 修复bug
- add: 新功能
- update: 更新
- docs : 文档改变
- style : 代码格式改变
- refactor : 某个已有功能重构
- perf : 性能优化
- test : 增加测试
- build : build工具发生变化, 如 grunt换成了 npm
- revert : 撤销上一次的 commit
- chore : 构建过程或辅助工具的变动
常见问题
commit取消
git commit -m 'initial commit' // 正常提交
git add forgotten_file // 又修改了文件,进行add添加
git commit --amend // 执行后,i编辑信息,esc:wq保存,enter,正常push
- git commit --amend之前可以是其他命令,编辑的信息替代initial commit 信息, 最终只会有一个提交——第二次提交将代替第一次提交的结果
暂存取消(取消add)
-
语法:git reset HEAD < file >… 如取消暂存 readme.txt 文件
git reset HEAD readme.txt
用户名邮箱配置
用户名一般在首次clone时自动弹出,后续不再弹出,如果后续要改动:
-
配置用户名称:git config --global user.name “用户名”
-
配置用户邮箱:git config --global user.email “邮箱”
-
以上执行不能配置,可以直接删除本地git账户凭证,正常提交会再次弹出填写用户名和邮箱(控制面板-用户账户-凭据管理器,删除git相关凭据)
gitignore忽略上传
在.git文件所在的目录创建 .gitignore 文件。
# 忽略.class后缀的所有文件
*.class
# 忽略名称中末尾为ignore的文件夹
*ignore/
# 忽略名称中间包含ignore的文件夹
*ignore*/
# 忽略多层嵌套node_modules
**/node_modules/**
# 忽略指定文件
.env.local
gitignore文件不生效的解决办法
对于已经进行过git add操作的目录,如果新添加了.gitignore文件,则在进行git commit时,.gitignore文件不会生效的;
解决办法如下:
# 删除在暂存区中的缓存
git rm -r --cached .
# 重新提交
git add .
git commit -m 'update .gitignore'
冲突问题
冲突解决:选择指定内容,add、commit、push
-
Accept Current Change
: 本地仓库代码; -
Accept Incoming Change
: 远程仓库代码; -
Accept Both Changes
: 两者都保存(合并); -
Compare Changes
: 打开本地和远程对比窗口;
本地分支间冲突特殊解决:冲突解决中的异常窗口,是系统让输入冲突日志信息,可不用输入,直接退出该模式,退出方式:按i
键,再按ESC
键,输入:wq
,然后回车;
- i:编辑,esc:退出编辑,:wq保存退出,回车执行
git推送验证
- commit 失败,一般有提交验证,简单的方法(偏方)是添加–no-verify,
git commit -m "xxxxx" --no-verify
- 在推送远程时,有时遇到换行方式问题,远程只能是LF,本地是CRLF(window)
- 解决一:将本地换行方式也使用LF
// settings.json
{
"files.eol": "\n",
"prettier.endOfLine": "lf"
}
第一种为编辑器自带(可单独配置)
第二种为prettier插件格式化配置
作用于之后的创建的文件,之前的还是需要进行一次手动更改。
- 解决二:git 推送时转换为LF,拉取时再转回CRLF,执行如下命令
git config --global core.autocrlf true
git 命令报错问题
1. git add . 失败
warning: LF will be replaced by CRLF in 文件.
The file will have its original line endings in your working directory
- 解决:git config --global core.autocrlf false
2. git branch --set-upstream-to=origin/develop,本地关联远程失败
error: the requested upstream branch ‘origin/develop’ does not exist
- 解决:git pull origin master --allow-unrelated-histories
- git branch --set-upstream-to=origin/master master
3. 无权限/SSH 克隆失败:在git push origin master或者pull时失败
- git config --global user.name “yourname”
- git config --global user.email“your@email.com"
- 删除.ssh文件夹(直接搜索该文件夹)下的known_hosts(手动删除即可,不需要git)
- ssh-keygen -t rsa -C “your@email.com”(请填你设置的邮箱地址),(执行后再次输入地址)
- 出现:Generating public/private rsa key pair.Enter file in which to save the key (/Users/your_user_directory/.ssh/id_rsa): 回车
- 系统会自动在.ssh文件夹下生成两个文件,id_rsa和id_rsa.pub,用记事本打开id_rsa.pub,复制全部内容
- 登录远程仓库,在设置中添加一个新的SSH keys
- ssh -T git@远程仓库地址,如github.com,或私有仓库地址,(提示输入yes,提示Welcome to xxxx成功)
- 重新克隆远程仓库
4. The requested URL returned error: 500
- 网络上的办法基本没啥用,大多数牛口不对马嘴,看起来有作用,实际就是偶然莫名其妙好了,
- 多为网络波动,去网站上将账号登出,尝试重新登陆,登陆不上就是波动中,过段时间尝试能登陆上就好了
**5. 报错 remote:HTTP Basic:Access denied fatal:Authentication failed for ‘https://XXXXXXXXX’: **
- 大致就是访问远程仓库访问失败,身份验证未通过
- 产生原因:本机账户密码过期必须修改,而远程和本地都是关联的本机,登陆远程仓库发现以前的密码登陆不上,而是使用更改后的密码
- 核心原因:账户密码问题(不管是什么原因,主要原因便是登陆的远程仓库密码更改,之前关联的账户和密码自然也就不存在)
- 解决:网上有很多命令的方法,核心就是修改凭证,我使用简单粗暴的方法就是直接
删除本地凭证
,再执行命令时就会弹出登陆验证,输入更改后的信息,自动重新创建即可。 - 删除本地凭证:控制面板-用户账户-管理windows凭据-普通凭据-对应的账户网址凭证,(一般会有两个,一个是网站凭证,一个是登陆这个网站的用户凭证,按理应该删除带用户的就行,我是都删了)