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 目录存储指向数据(分支、远程仓库和标签等)的提交对象的指针

参考知乎动图

相关推荐
飏旎16 小时前
git pull和git fetch的区别
git
z涛.20 小时前
git的使用
git
大卫小东(Sheldon)1 天前
智能生成git提交消息工具 GIM 发布 1.7 版本了
git·ai·rust
慧都小项1 天前
UI测试平台TestComplete如何实现从Git到Jenkins的持续测试
git·ui·jenkins·代码质量·testcomplete·zephyr for jira
可曾去过倒悬山1 天前
Mac上优雅简单地使用Git:从入门到高效工作流
git·elasticsearch·macos
穗 禾2 天前
github与git新手教程(快速访问github)
网络·git·github
我不是程序猿儿2 天前
【git】在 GitLab 上如何把 A 分支(如 feature/xxx)合并到 B 分支(如 trunk)
服务器·git·gitlab
是芽芽哩!2 天前
GitLab 仓库 — 常用的 git 命令
git·gitlab
用手码出世界2 天前
Git之本地仓库管理
git·gitee
言慢行善2 天前
对git 熟悉时,常用操作
git