接上一篇补充
git config --global user.name " "
git config --global user.email 邮箱地址
配置用户名和邮箱
git commit 使其处于交互区,没有使用 -m,默认用vim 来编辑和提交信息
输入要提交的内容,然后按ESC建回到命令模式,输入 :wp 退出
分支
分支是git中的重要功能,我们可以把它看作代码库中的不同版本,可以独立存在,并且有自己的提交记录,优点是分支中的内容互不影响,保证了主线代码仓库随时处于可用且比较稳定的状态,默认分支为main,
git branch 建立一个新的分支
git checkout dev 切换到不同分支;恢复文件
git switch 切换不同分支
git merge 分支名(eg.dev) 将dev分支和并到当前所在分支,git 会进行一次自动提交,分支合并后仍然存在
git branch -D 强制删除分支 如果合并了的话,可以用-d
合并冲突
形成的原因:git会进行自动合并,当两个分支修改同一代码时会出现错误,要用手工来解决冲突后才能提交
git diff 查看冲突的内容
git status 查看冲突列表
git merge --about 终止合并
指针
HEAD指针
使用git checkout
来移动HEAD指针,移动的对象可以是分支指针也可以是快照。
HEAD指针可以指向快照也可以指向branch。当指向branch时提交后会和branch指针一起向后移动,当不指向branch提交时时则会在一个detached状态。
分支(branch)指针
使用git branch -f
来移动分支指针,移动的对象只能是快照。当且仅当HEAD指针指向分支指针的时候,提交才会有效。
Git引用
Git中的引用是一个非常重要的概念,对于理解分支、HEAD指针以及reflog有帮助。Git系统中的分支名、远程分支名、tag等都是指向某个commit的引用。比如master分支,origin/master远程分支,命名为V1.0.0.0的tag等都是引用,它们通过该保存某个commit的SHA1哈希值指向某个commit
SHA1哈希值
在Git系统中,每个Git对象都通过哈希值来代表这个对象。哈希值是通过SHA1算法计算出来的,长度为40个字符(40-digit)。
对象的存储
所有的Git对象都会存放在.git/objects目录中,对象SHA1哈希值的前两位是文件夹名称,后38位作为对象文件名。
日志
进入.git/logs文件夹,可以看到这个文件夹也有一个HEAD文件和refs目录,这些就是记录仓库修改的地方。目录下记录了包括git commit,git checkout,git stash等命令的操作历史。
git stash,保存当前工作进度,会把暂存区和工作区的改动保存起来。
执行完这个命令后,在运行git status命令,就会发现当前是一个干净的工作区,没有任何改动。
可以使用git stash pop来恢复之前的进度.
题目:
扫描后发现,存在一个flag.txt,先访问一下,看见一个flag,提交一下,发现不对,应该是存在git泄露
按照老方法
不在这里,利用 tree 查看其它版本
真...... 找到一堆假的flag