背景
Git版本:2.31.1
视频地址:https://www.bilibili.com/video/BV1vy4y1s7k6
Git命令
基本命令
git config
设置用户签名(--global 可以去掉,去掉的话配置就不是全局的)
git config --global user.name 用户名
git config --global user.email 邮箱
windows设置完上面的内容,去C盘的与当前windows用户名同名目录下,会有.gitconfig文件,文件内容就是设置的全局用户名、邮箱
git init
初始化git,生成隐藏的 .git 目录
Linux 命令 ll -a 能显示隐藏文件
git status
查看 git 状态
在 git init结果:
On branch master # 当前分支
No commits yet # 当前内容还没有提交
nothing to commit (create/copy files and use "git add" to track) # 有哪些东西可以commit
# 红色的文件表示没有被添加进暂存区,绿色的文件表示已添加
这时候添加一个文件
git add xx
将xx目录、文件添加进暂存区
“git add .” :将此目录下的所有文件都添加到暂存区
git rm --cached xx
将xx目录、文件从暂存区删掉
用于从暂存区中删掉 git add 命令添加进的目录、文件
这个删除只是从git暂存区中删掉,目录、文件的物理实体依旧存在
git commit -m “备注” xx
将xx目录、文件提交到本地库
如果没有给出xx,默认就提交add进暂存区的内容
git reflog
查看引用日志信息,可以看版本信息(精简的版本号,提交备注)
git log
查看更详细的日志信息(完整版本号,提交人,提交时间,提交备注)
git reset --hard 版本号
版本穿梭,到版本号指定的那个版本
版本号就是 git reflog、git log 显示内容中的那串码
用于在同一个分支中切换到不同提交的版本
当合并冲突时,当前分支会变为merging状态,取消merging状态命令 git reset --hard head,这里的head不是版本号,就是head
版本控制
git branch
显示所有分支,当前所在分支前会有星号*
git branch 分支名
创建分支,默认会以当前分支为基础创建,也就是新分支的内容就是当前分支的现有内容
git branch -v
查看当前分支
git checkout 分支名
切换分支
git merge 分支名
把指定的分支合并到当前分支上
远程库操作
git remote -v
查看当前所有远程地址别名
git remote add 别名 远程地址
给“远程地址”起“别名”,别名一般都会是 origin
创建别名后 git remote -v 查看会看到两个,一个用来 fetch 拉取,一个用来 push 推送
注意“远程地址”是github或gitee或gitlab提供的http或https开头的,不是ssh的
git push 别名 分支
推送本地分支上的内容到远程仓库
git clone 远程地址
将远程仓库的内容克隆到本地
git pull 远程库地址别名 远程分支名
将远程仓库对于分支最新内容拉下来后与当前本地分支直接合并
其他
指针
HEAD -> 分支名 -> commit提交版本
我们所说的指针都是指向具体版本记录的指针,当前是哪个分支是由HEAD指针决定的,HEAD指向哪个分支指针,我们就在哪个分支上
所以创建分支的本质就是多创建一个指针;切换分支就是把HEAD指向另一个版本指针
冲突
冲突原因
两个分支在同一个文件的同一个位置有两套完全不同的修改,合并的时候Git无法替我们决定使用哪一个,就产生了冲突
冲突合并
在有冲突的时候合并,会提示错误并且当前分支会变为merging状态
撤销冲突状态
当合并冲突时,当前分支会变保持为merging状态
撤销merging状态命令 git reset --hard head,这里的head不是版本号,就是head
查看冲突内容
在分支是merging状态时,打开提示有冲突的文件,会发现这样的内容:
<<<<<<< HEAD
当前分支下的内容
=======
要与当前分支合并的另一分支下的内容
>>>>>>> 另一分支的名字
解决冲突
- 首先要解决冲突的文件内容
编辑提示有冲突的文件内容,将冲突的部分手动解决,保存退出
- 添加文件到暂存区
git add 目录或文件名
- 最后提交本地库
git commit -m "备注"
注意,这条命令不能在最后带有“目录或文件名”
将所有冲突的内容提交本地库后,就会发现分支的merging状态消失了
本地第一次推送到远程库
背景
本地创建的项目,想推送到自己的远程库
远程库没有对应项目,需要新建
操作
远程:
新建仓库
复制仓库地址(http或https开头的,非ssh)
本地:(在项目目录下用git bash操作,默认本地分支是master)
git init
git status (非必须,这里就是为了看下git状态)
git add .
git branch (非必须,看git分支)
git commit -m '注释'
git remote add 远程仓库别名(一般是origin) 远程仓库地址
git remote -v (非必须,看远程分支)
git push origin master -f (强制推送,本地会全部覆盖远程,这里只针对远程仓库为空的情况)
如果远程也有内容,即不可以强制push以本地覆盖远程,可参考下面的(本人没试过,不知道效果)
git branch 本地新分支名
// 这中间是不是要加一个切换到新分支的过程? “git checkout 本地新分支名”
git push 远程仓库名 远程分支名
远程库同步.ignore
背景
远程的有些文件或目录想忽略掉,但一开始上传时这些内容都上传到仓库了,现在想根据新的 .ignore 文件 “刷新” 一下远程库,将已经上传的文件从远程库删掉
操作
本地:
配置 .ignore 文件
git rm -r --cached .
git add .
git commit -m '注释'
git push 远程仓库别名 远程分支名
|