Git总结

Git介绍

一、Git常用命令

添加、提交

shell 复制代码
git add  
将文件从工作区添加到暂存区,表示git开始追踪文件,如果不想让git追踪了,可以使用
git rm --cached <file>  取消文件追踪,仅仅只代表追踪取消,工作区文件还是照样存在
git mv
重命名文件,相当于mv +git rm + git add


如果add以后,我再改动了文件,想要撤销这次修改?就可以使用
git restore file
或者使用
git checkout -- file
回到上一次add以后的状态。注意这里不能直接删除文件

注意上述命名和git rm --cached file 的区别,前者是取消修改,后者是取消追踪!

如果我想取消add呢?就使用git提示的命令
git restore --staged <file>  注意与上述命令的区别


git commit -m "message"
将暂存区的文件提交到本地库,并添加注释,加-a可以自动添加到暂存区

git commit --amend
修改上一次提交的message

删除

shell 复制代码
删除仓库中所有没有跟踪的文件,清除编译生成的临时文件
git clean -i 表示以交互的形式删除文件
git clean -n 查看所有即将被删除的文件
git clean -f 表示强制删除
git clean -d 递归删除目录

历史记录、分支

shell 复制代码
git log
查看提交历史
--oneline:每个提交一行
--graph:显示分支结构
--stat:显示文件删改信息
-p:显示详细的修改内容

git reset --hard  <版本号>
可以将HEAD指针回退到之前的版本号

git checkout  git switch 
切换分支

git checkout -b <本地分支> <origin/远程分支>
将远程仓库里指定的分支拉取到本地,并在本地创建一个分支与指定远程仓库分支关联起来。并切换到新建的本地分支中

git branch -a -r -v 所有分支,远程分支,每个分支的最后一次提交

git branch --merged 查看哪些分支已经合并到当前分支,意味着可以-d删除

git branch --no-merged 查看哪些分支没有合并到当前分支,此时-d删除会出错,除非-D强制删除
shell 复制代码
git branch -vv
可以查看分支跟踪信息,以及是否领先、落后
shell 复制代码
git merge <分支test>
将test分支合并到当前分支,注意这里只会修改当前分支的内容。
比如有test和master两个分支,同时修改了txt文件,test修改一行,master修改第二行,虽然人看起来合并结果没有冲突,但是git确定不了,因此会提示冲突,此时人为解决冲突再合并即可。合并完成以后master分支就是同时修改了第一行和第二行的结果,而test分支不变。

git merge    git merge --squash的区别

暂存修改

shell 复制代码
使用场景:在dev分支开发的时候,需要去hotfix分支解决bug,但是不想放弃当前的修改,就可以使用git stash保存起来
值得注意的是,只有git add进去的文件,才能被stash追踪。
git stash == git stash save

查看堆栈里的修改
git stash show||list

应用堆栈中最新的修改,且不丢弃
git stash apply

应用堆栈中最新的修改,且丢弃
git stash pop

远程

shell 复制代码
git remote -v
查看当前所有远程库地址的别名

git remote add <别名> <远程地址>
给远程库地址添加别名
shell 复制代码
git push <别名> <分支名>
将分支推送到远程地址,没有别名也可以填地址,但是比较麻烦

实际上这个命令的完整命令是 
git push <远程主机名> <本地分支名>:<远程分支名>如果本地分支名与远程分支名相同,则可以省略冒号:
git push <远程主机名> <本地分支名>
比较常见的是
git push origin master
因为一般是git clone下来的,然后git默认把远端地址别名取为origin
shell 复制代码
git pull <远程主机名> <远程分支名>:<本地分支名>
git pull 和 git push 命令类似,当远程仓库存在改动时,为了保证本地和远程同步,就要使用git pull
事实上git pull相当于git fetch + git merge

git fetch命令格式与git push也类似。
eg: git fetch master:new_feature_branch表示从远程的master分支拉取更新到本地的new_feature_branch分支

变基

shell 复制代码
git rebase -i HEAD~2
背景是当前我有两个commit,时间上是a,b。然后可以使用该命令将b压缩到a上面。
fixup参数代表squash压缩。如果顺序反了会有错误提示,--abort这次rebase即可。

git checkout feature
git rebase master
将当前分支feature变基到master分支

origin的一些解释
git变基以及更多例子
git fetch的一些解释

二、Git内部原理

git核心组成部分:HEAD 文件、index 文件、objecs 目录、refs目录。

HEAD 文件指向目前被检出的分支
index 文件保存暂存区信息
objects 目录存储所有数据内容
refs 目录存储指向数据(分支、远程仓库和标签等)的提交对象的指针

参考知乎动图

相关推荐
吴声子夜歌6 小时前
TypeScript——泛型
前端·git·typescript
春日见7 小时前
3三分彻底了解Git Graph极其应用
git
风.foxwho9 小时前
jenkins使用 ED25519密钥 拉取Git 代码 配置
git·servlet·jenkins
ruanCat10 小时前
前端工程化工具链从零配置:simple-git-hooks + lint-staged + commitlint
前端·git·代码规范
木子小喵11 小时前
Git的使用介绍!超通俗!
git
coderYYY11 小时前
git push报错Authentication failed for ‘xxx’也不会弹要求输入用户名密码的最终解决方法
前端·git·gitee·github
@PHARAOH12 小时前
WHAT - git worktree 开发的并发模型
大数据·git·elasticsearch
苦瓜小生13 小时前
【Git】| 将拉下来的代码上传到自己的 Gitee 仓库(手把手教学)
git·gitee
WKP941813 小时前
git的merge和rebase操作
git
___波子 Pro Max.16 小时前
Git 分支切换
git