git-usage
git 基本使用
0x00 基本介绍
仓库(Repository)
1 | 仓库就是你的项目 |
收藏(Star)
1 | 仓库主页star按钮,星星的数量为收藏的人数 |
复制克隆项目(Fork)
1 | 点击这个别人的项目就进入你的仓库了,你就可以在你的仓库二次开发, |
发起请求(Pull Request)
1 | 这个选项基于fork,如果你想把你的二次开发合并到原作者的项目中 |
关注(Watch)
1 | 关注某个项目,如果这个项目有了任何更新,你都会第一时间收到关于这个项目的通知提醒 |
事物卡片(Issue)
1 | 发现项目的问题,进行讨论的地方 |
基本功能与命令
0x01 Git 使用
Git工作区域
Git Repositpry (Git 仓库)
1 | 最终确认的文件保存到仓库,成为一个新的版本,并且对他人可见 |
暂存区
1 | 暂存已经修改的文件最后统一提交到git仓库中 |
工作区 (Working Directory)
1 | 就是本地电脑中的目录 |
Git初始化
基本信息设置
这一步会影响github仓库主页显示谁提交的该文件
1 | # 设置用户名 |
在本地的一个目录初始化一个新的Git仓库
git init
会在当前目录创建一个.git
文件夹
所有Git需要的数据和资源都存放在这个目录中
1 | git init |
向仓库中添加文件流程
可以用
git status
查看git工作区域的状态
先将文件从工作区添加到暂存区
1 | git add test1.txt |
将暂存区上传到git仓库中,生成版本
1 | git commit -m "提交描述" |
查看版本记录
1 | git log |
修改文件之后和添加文件的流程一样
如果修改了了很多文件,而不想每一个都add,想commit自动来提交本地修改,我们可以使用-a
选项
1 | git commit -a -m "提交描述" |
从Git中删除文件
从Git中移除某个文件,就必须要从已跟踪文件清单中移除
1 | git rm test1.txt |
如果删除之前修改过并且已经放到暂存区的话,需要加上-f
选项
1 | git rm -r test1.txt |
如果希望只把文件从暂存区移除,但仍然保持在当前工作目录中,使用--cached
选项
1 | git rm --cached test1.txt |
git 回滚
回滚去之前的版本
1 | git log # 查看版本号 |
回滚去之后的版本
1 | git reflog # 查看本地的顺序提交日志 |
0x02 git分支
几乎每一种版本控制系统都以某种形式支持分支。使用分支意味着你可以从开发主线上分离开来,然后在不影响主线的同时继续工作。
有人把 Git 的分支模型称为必杀技特性,而正是因为它,将 Git 从版本控制系统家族里区分出来。
分支操作
查看分支
1 | git branch |
创建分支
1 | git branch 分支名 |
切换分支
1 | git checkout 分支名 |
合并分支(可能会产生冲突)
将指定的分支名合并到当前分支
产生冲突时就需要手动对文件中冲突的部分进行修改
1 | git merge 分支名 |
删除分支
1 | git branch -d 分支名 |
0x03 使用Git管理远程仓库
将远程仓库克隆到本地
1 | git clone <repo> |
将远程仓库中@关联的子文件递归地下载到本地
1 | git clone --recursive <repo> <directory> |
将本地仓库同步到git远程仓库中
1 | # 给远程仓库起别名 |
将git远程仓库同步到本地仓库中
1 | git pull <alias name> <repo> |
解决git pull [您对下列文件的本地修改将被合并操作覆盖]的错误
是否想要保存本地修改
yes
1
2
3
4
5
6
7# 将当前修改保存本地快照
git stash
# 回滚到上一版本 拉去快照
git reset --hard
git pull origin main
# 恢复快照
git statsh popno
直接将本地的状态恢复到上一个 commit id 。然后用远程的代码直接覆盖本地就好了。1
2
3# 直接回滚拉取就完事了
git reset --hard
git pull origin main
解决不同分支之间的合并某一个提交
1 | # 切换到已经提交的分支,找到要合并的 commit id |
0x04 git base
base(变基):使git记录变得更加简洁
注意 :git rebase
可能会产生冲突,手动解决后并根据git提示完成一些命令后在输入git rebase --continue
,可完成日志的合并
将多个本地提交记录合成一个记录远程提交
1 | # <num>数字 -- 找<num>条最近的提交进行合并日志提交 |
注意:合并记录时不要和已经push到远程仓库的记录合并
解决远程仓库领先本地一个版本且本地仓库有一个新版本未提交
1 | git fetch <alias name> <repo> |
其他
git配置文件
项目配置文件:项目/.git/config
1 | git config --local user.name 'wakaka' |
全局配置文件:~/.gitconfig
1 | git config --global user.name 'wakaka' |
系统配置文件:/etc/.gitconfig
1 | # 注意:需要root权限 |
git配置代理
clone with ssh
在 ~/.ssh/config
后添加下面两行
1 | Host github.com |
clone with http
建议使用http, 因为socks5 在使用git-lfs时会报错
proxyconnect tcp: dial tcp: lookup socks5: no such host
1 | git config --global http.proxy http://127.0.0.1:1088 |
CTF中常用命令
查看每个commit修改了哪些文件
1 | git log --stat |
查看当前版本与想查看的commit之间的变化
1 | git diff HEAD commit-id |
回滚到上一版本(HEAD^
表示上一版本,HEAD
表示当前版本)
1 | git reset --hard HEAD^ |