git 是用于 Linux 内核开发的版本控制工具。与 CVS、Subversion 一类的集中式版本控制工具不同,它采用了分布式版本库的作法,不需要服务器端软件,就可以运作版本控制,使得源代码的发布和交流极其方便。git 的速度很快,这对于诸如 Linux 内核这样的大项目来说自然很重要。git 最为出色的是它的合并追踪(merge tracing)能力。
安装及配置
安装:
sudo apt install git
配置:
本地配置用户名与用户
git config --global user.name "Your Name" git config --global user.email "email@example.com"
生成 SSH 密钥,并与 GitHub 建立互信
- 打开 Terminal,输入以下命令生成秘钥和公钥,并一路回车
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
- 获取公钥,并复制到 GitHub
cat .ssh/id_rsa.pub
- 测试
ssh -T git@github.com
出现结果后,键入
yes
,你将会看到> Hi username! You've successfully authenticated,but GitHub does not > provide shell access.
这就表明成功了 🎉
提交常用命令
创建版本库
git init
提交
git add filename git commit -m "description"
提交信息查看
# 显示工作树状态 git status # 显示版本库和工作树之间的不同 git diff # 撤销最近一次 commit git reset --hard HEAD^ # 重写最近一次提交信息 git commit --amend -m "description" # 查看提交历史 git log
合并多次提交
git rebase -i HEAD~n # 将 pick 改为 squash 或 s # 注释掉不想要的 commit message # 放弃合并 git rebase --abort
分支操作
# 显示本地所有分支
git branch
# 显示远程所有分支
git branch -a
# 重命名当前分支
git branch -m new_branch_name
# 切换分支
git checkout other_branch_name
# 删除本地分支
git branch -d branch_name
# 强制删除本地分支
git branch -D branch_name
# 根据当前分支创建新分支
git checkout -b new_branch
项目协同
当我们要往其他人的仓库里贡献代码时,需要
fork
他人的代码仓到自己的 GitHub 仓库clone
到本地修改代码- 提交代码到自己的代码仓
- 合并到他人的仓库
同步远程仓变更
- 添加远程分支
# 添加远程分支 git remote add upstream # 查看远程分支 git remote -v
- 同步远程修改
# 获取远程仓更新 git fetch upstream # 切换到目标分支 xxx git checkout xxx # 将远程修改 merge 到本地 git merge upstream/xxx # 提交到自己远程代码仓 git push
在 Github 上删除已提交的文件夹
假如我们在提交中不小心把一个不需要的文件夹提交到了远程仓库,而此时再写入 .gitignored
已经为时已晚,为了解决这一问题,可以这样做:
Github 在提交了之后无法在线删除文件夹,但是在本地 Git 库中却可以,只要在 Git 库中删除对应的缓存,再 push 到 Github 服务器,文件夹的删除目的就达成了
以下是具体操作:
git rm -r --cached 目录名
git commit -m '描述'
git push -u origin master
其他
推荐配合 alias 命令别名,实现快捷操作