最后
考虑到文章的篇幅问题,我把这些问题和答案以及我多年面试所遇到的问题和一些面试资料做成了PDF文档
喜欢的朋友可以关注、转发、点赞 感谢!
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
git reset [1dedb4c7d15a commit sha1]
reset后加具体的提交sha1值,可以会退到[1dedb4c7d15a]这个版本,之后的提交将会被删除(危险操作!!!慎用,虽然可以使用
git fsck --lost-found
找回)
可以使用
checkout [1dedb4c7d15a]
分离头指针查看之前的提交,可以基于此次提交去修改代码,(注意再次切回其他分支时候,必须为此创建一个branch,不然基于此次的commit都会消失),这样可以共存
找回丢失的commit(救命!!!)
git fsck --lost-found
如果不小心使用的
git reset [commit sha1]
,会把你的[commit sha1]提交之后的文件全部删除
此时,可以通过
git fsck --lost-found
去寻找那些被悬空(dangling)的commit,然后通过提交的sha1值去
改命令还可以先找到那些被悬空的文件
修改文件名之后,提交到暂存区
git mv [readme] [readme.md]
修改文件名之后,提交到暂存区
注意:不需要1.在工作区里修改这个文件名,然后 2. add修改后的文件 3.rm旧的文件,
直接执行
git mv [readme] [readme.md]
即可
查看简要的log
git log --oneline
查看简要的log
查看最近4个log
git log -n4 --oneline
查看最近4个log
图形化展示所有分支的log
git log --all --gragh
查看所有分支的log,图形化展示
查看git log的帮助,在浏览器里
git help --web log
查看git log的帮助,在浏览器里
调出图形界面
gitk
调出图形界面
创建分支
git checkout -b [分支名] [commit sha1/分支名称]
创建分支
切换分支
git checkout [分支名]
切换分支
查看所有分支
git branch -av
删除分支
git branch -d [分支名]
git branch -D [分支名]
如果-d清除不掉的,确实不想要,可以用-D
其实就是让你确认删除的意思
查看文件类型
git cat-file -t [文件sha1]
查看文件类型,有三种文件类型
commit :提交
tree :文件夹
blod :文件
查看文件内容
git cat-file -p [文件sha1]
查看文件内容,注意只能查看sha1,不能写文件名(因为git存文件是以sha1存储的,避免同一个文件不同名称的情况浪费空间)
直接 cat [文件名]也可以查看文件内容,但这不是git的命令
比较两次提交的差异
git diff [commit sha1] [commit sha1]
还可以用HEAD指代当前的提交
用HEAD~1指代前一次提交 相当于 HEAD^
HEAD~2 指代前两次提交… 相当于 HEAD^^
比较暂存区与HEAD之间的差异
git diff --cached
比较工作区与HEAD之间的差异
git diff —HEAD
比较工作区与暂存区差异
git diff
注意后面什么都不加,表示所有文件作比较
可以使用
git diff -- [文件名]
来单独比较指定的文件,注意 --与[文件名]之间必须加空格
如何让暂存区的全部文件恢复成和HEAD的一样?
git reset HEAD
我们每次在工作区修改了文件,都要先添加到暂存区,然后执行commit,把暂存区的文件提交到仓库
git status 是查看工作区与暂存区文件的区别,他不会显示每个文件的具体那内容,只是告诉你
- 工作区有一个文件没添加到暂存区 红色 还不能提交
- 工作区有一个文件内容修改了,但是没添加到暂存区 红色 还不能提交
- 你已经把工作区的修改添加到了暂存区 绿色 可以直接提交了
下图:
- 第一次执行 git status 显示你已经把工作区的修改add到了暂存区
- 执行完git reset HEAD 后,把暂存区恢复成功与HEAD一样了,也就是说,之前工作区add到暂存区的文件都回退了
- 第二次执行git status 显示,你工作区的文件,还没有add进暂存区,
- 其实git reset HEAD 是 git add 的逆向操作
暂存区里的部分文件恢复成和HEAD一样
git reset HEAD -- [文件名]
git reset HEAD -- [文件名] [文件名]
多个文件之间使用空格
工作区恢复成暂存区状态 23
git checkout — [文件名]
如果变暂存区内容:reset
如果变工作区内容:checkout
消除最近的几次提交 24
git reset — hard [commit sha1值]
修改最近一次提交的msg
git commit --amned
弹出
修改完退出后
修改前几次的提交信息
git rebase -i [commit sha1]
假设log历史为
5
4
3
2
1
第一步:
注意:要改变第3条log,必须
git rebase 2
也就是3的父亲,然后再展开操作
第二步:
弹出下图,把你要修改的那条提交 pick 改为r ,保存退出
第三步:
退出上图会再次弹出一个图,直接修改log信息,然后保存退出,就成功了(这一步没截图,使用这个黑色的图凑一下,就是这个图)
第四步:
注意下图变基之后的提交sha1都变了
合并多个连续的commit为一个commit
需求:
合并多个提交
第一步:
git rebase -i [父提交sha1]
第二步:弹出下图,把pick改为s ,‘ESC’键,输入:wq 退出
第三步:
这时候会弹出来,键入三次合并一次的提交信息,保存退出
弹出
检查一下子:
合并多个不连续的commit
需求:
步骤繁琐一点,略 可参见视频《怎样把间隔的几个commit整理成1个》
临时加塞的紧急任务怎么办stash
基于上次提交,正在修改A文件,但是还没改完,这时候突然有紧急bug,需要处理C文件,
可以使用
git stash
把目前的修改了一部分的A文件暂存在一边,此时git status
发现工作区是干净的,与暂存区一样的,
现在去处理C文件,处理完后提交即可
现在想回过头来继续处理A文件,执行
git stash apply
或者git stash pop
后即可把做了一般的A文件恢复
git stash
把目前手头上的活先搁置到一边存起来
git statsh list
查看所有stash的列表
WIP on master: c5618a9 qqq)
git stash apply
类似堆栈,弹出最上面的stash
把 stash里的改动弹出来,放到工作区,而且stash list里的信息(WIP on master: c5618a9 qqq)还存在
git stash pop
把 stash里的改动弹出来 放到工作区,而且删除stash list里的信息(WIP on master: c5618a9 qqq)
添加忽略文件
注意:
doc 表示不管doc文件夹,也不管doc文件夹下面的文件
doc/ 表示要管里doc文件夹,但是不要管doc文件夹下面的文件
git备份
哑协议(一般不用)
智能协议(一般用这个)
git clone --bare file:///path [仓库名].git [备份仓库名]
本地的仓库push到远端仓库
需求:
在上图中,hello这个仓库是本地的仓库,我们在这里完成工作,并提交到仓库里
上图中的ya.git和zhineng.git属于远端仓库,是通过
git clone --bare file:///path [仓库名].git
创建的,
现在我们要把平时工作的hello仓库的提交,push到远端的zhineng.git
第一步:通过git remote add建立仓库间的关联
切换到本地hello仓库,执行
git remote add <name> <url>
git remote add [zhineng] [file:///Users/apple/learning/beifen/zhineng.git]
建立关联
此时可以通过
git remote -v
查看本地仓库所关联的远端仓库地址
第二步:git push
首次提交需要使用
git push --set-upstream zhineng temp
以后使用
git push <name>
即可
这样每次本地hello仓库有了变动,就可以push到远端了
注意:如果本地关联了多个远端仓库
-
先查看所有的远端仓库
git remote -v
-
然后选择你要push的仓库地址
git push [路径]
Github
GitHub里创建ssh公钥、私钥 ?
创建公钥私钥
查看创建好的公私钥(我原来就有,新创建了一个)
在github里配置公钥
配置好公钥后,以后不需要输入账户名密码,github会智能识别你的身份
在上图的命令行里切换到公钥所在目录,输入命令查看公钥信息
然后打开github,复制进去
配置好如下图(这是老师在视频里的截图)
在github上创建一个个人仓库
略
把本地的仓库关联到github的仓库
-
复制远端地址 use HTTPS 可以切换各种协议,得到远端不同的仓库地址
-
本地运行git remote add [新起个仓库名字] [远端仓库地址]
往github上push
在上图中 执行 git push [我们起远端仓库名 github] --all
--all
表示push本地所有分支
push 之前一定要先在github上配置好公钥,不然会显示没有权限
开始push,出现问题
git fetch [远端仓库名] [远端仓库分支]
gitk --all
图形化查看所有分支
我们直接 git merge [远端分支],被拒绝了
需要加上 --allow-unrelated-histories
去merge不相关的提交
git merge --allow-unrelated-histories github/master
查看本地+远端所有分支
ok,merge成功了
现在再去push
再次看看图形
最后
以前一直是自己在网上东平西凑的找,找到的东西也是零零散散,很多时候都是看着看着就没了,时间浪费了,问题却还没得到解决,很让人抓狂。
后面我就自己整理了一套资料,还别说,真香!
资料有条理,有系统,还很全面,我不方便直接放出来,大家可以先看看有没有用得到的地方吧。
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
lated-histories github/master`
[外链图片转存中…(img-LUiWw7vY-1715748005699)]
查看本地+远端所有分支
[外链图片转存中…(img-Srpco9AF-1715748005699)]
ok,merge成功了
[外链图片转存中…(img-DryiKE7C-1715748005699)]
现在再去push
[外链图片转存中…(img-iEFRkOwy-1715748005699)]
再次看看图形
最后
以前一直是自己在网上东平西凑的找,找到的东西也是零零散散,很多时候都是看着看着就没了,时间浪费了,问题却还没得到解决,很让人抓狂。
后面我就自己整理了一套资料,还别说,真香!
资料有条理,有系统,还很全面,我不方便直接放出来,大家可以先看看有没有用得到的地方吧。
[外链图片转存中…(img-uBbrdUe5-1715748005700)]
[外链图片转存中…(img-3wmFGQj2-1715748005700)]
[外链图片转存中…(img-5zm8ZlFO-1715748005700)]
[外链图片转存中…(img-0qsdyOeU-1715748005701)]
[外链图片转存中…(img-ze0NVLOC-1715748005701)]
[外链图片转存中…(img-DNia4kMM-1715748005701)]
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!