GIT
命令
先 commit 一次后才会真正创建 master 分支
从 git 服务器拉取完整仓库代码
git clone xxx.git
配置开发者用户和邮箱,代码每次提交包含配置
git config user.name xxx
git config user.email xx@xx.com
cat .git/config # 查看配置
git config --list # 获取所有 git 配置
# 配置代理
git config --global http.proxy 127.0.0.1:7890
git config --global https.proxy 127.0.0.1:7890
# 查看代理
git config --global --get http.proxy
git config --global --get https.proxy
# 取消
git config --global --unset http.proxy
git config --global --unset https.proxy
查看文件变动状态
git status
添加文件变动到暂存区
git add xxfile
git add . # 添加所有文件
git add -i # 进入交互式
# patch: 显示文件当前内容与本地版本库差异,决定是否添加修改到暂存区
# update: 列出工作区 修改 或 删除 的文件列表
# diff: 比较暂存区文件和本地版本库的差异
此时.git/objects
中加入xx/yyyyyyyyy
,可通过git cat-file -p xxyyyyyyyyy
查看添加的文件内容
列出将要被提交的文件
git commit -n
提交文件变动到版本库,若为其他分支会获取一个url用于pull request
git commit -m "description" # 会创建新的tree、blob、commit object
# 可以直接换行
# --amend 只添加 修改 和 删除 的文件到本地版本库,修改最近一次commit信息,修改后commit id变化
feat/fix/...: xxxx
- xxxx
- xxxx
查看commit添加的内容
git ls-files -s
git show --raw # 最近提交的commit文件
撤消上一次commit的内容
git reset --soft HEAD^
git reset --soft HEAD~1 # 撤回到上一次还没提交
删除暂存区的内容
git rm --cached -r file
修改最近3个commit
git rebase -i HEAD~3
查看悬空的commit
git fsck --lost-found
删除不需要的object,且打包压缩object减少仓库体积
# 先设置reflog防止无操作后数据丢失
git reflog expire --expire=now --all
git gc prune=now # 修剪多久前对象,默认2周前
重命名文件并添加变动到暂存区
git mv src.md dest.md -f # -f 强制
从工作区和暂存区移除文件并添加变动到暂存区
git rm xx.md
将本地的代码改动推送到服务器
git push origin branch_name # orgin: git 服务器地址
git push -u origin branch_name # 无该分支 -u 来创建
删除远程分支
git push origin -d remote_branch
将本地分支推送到对应远程分支
git push origin dev_tmp:dev_tmp
服务器最新代码拉取到本地并与本地代码合并,等价于git fetch + git merge
git pull origin brach_name # main or master
git pull --rebase # 等价于 git fetch + git rebase
合并他人代码
git fetch # 显示哪些分支发生更改
git merge orgin/xxx_branch # 云端他人分支合并到自己分支
git stash # 处理冲突 将当前工作目录更改丢到一边,使得工作目录保持干净
git merge orgin/xxx_branch
git stash pop # 将刚丢到一边的更改捡回来
远程分支存在本地分支没有的代码,本地分支存在远程分支没有的代码
git pull --no-rebase origin branch_name
// 处理冲突
git add xxx
git rm xxx
git commit xxx
git push origin branch_name:branch_name
当git reset HEAD~3
使得远程分支高于本地分支多个版本,而需要远程分支强制回滚到本地某个分支(不建议使用)
git push --force-with-lease origin branch_name
版本提交记录
git log # J下翻, K上翻, Q退出
标记里程碑
git tag publish/0.0.1
git tag -a # 创建附注标签
git push origin publish/0.0.1
分支命令
git branch # 查看分支
git branch xxx # 创建
git branch -m old_name new_name # 重命名
git branch -a # 查看本地版本库和远程版本库上的分支列表
git branch -r # 远程版本库的分支列表
git branch -d xxx # 删除
git branch -vv # 查看带有最后提交id、最近提交原因等信息的本地版本库分支列表
git branch --set-upstream-to=origin/my_test # 将本地分支关联到远程分支
切换分支
# 切换到某分支 -b 创建并切换
git checkout xxx
# 创建一个全新的,完全没有历史记录的新分支,必须commit操作后才真正成为一个分支
git checkout --orphan new_branch
# 比较两个分支间的差异内容,并提供交互式的界面来选择进一步的操作
git checkout -p other_branch
合并其它分支到当前分支
# 默认合并,分支中的各个节点都加入到master中
git merge
# 将待合并分支上的 commit 合并成一个新的 commit 放入当前分支,适用于待合并分支的提交记录不需要保留的情况
git merge --squash
# 执行正常合并,在 Master分支上生成一个新节点
git merge --no-ff
# 没有冲突的情况下合并,git自动生成提交原因
git merge --no-edit
# fast-forward:线性不创建新merge结点,命令`--ff-only`
# three-way merge:三方合并产生新merge结点,命令`--no-ff`
栈:保存当前修改或删除的工作进度
git stash # 将未提交文件保存到Git栈中
git stash list # 查看栈中保存的列表
git stash show stash@{0} # 显示一条记录
git stash drop stash@{0} # 移除一条记录
git stash pop # 检出最新一条记录移除
git stash apply stash@{0} # 检出一条记录
git stash brach new # 检出最近一次记录并创建一个新分支
git stash clear # 清空栈里所有记录
git stash create # 为当前修改或删除文件创建自定义栈,返回一个ID
git stash store ID # 栈真正创建一个记录,文件并未从工作区移除
gitlab 配置
# gitlab ssh key
ssh-keygen -t rsa -C "email.com" # 查看 id_rsa.pub 复制到 gitlab ssh-key 中
# 即可 git clone
比较工作区、暂存区、本地版本库间文件差异

git diff --stat
远程仓库
git remote -v # 列出已存在的远程分支
git remote add origin https://github.com/xx/xx.github.com.git # 添加一个新远程仓库
将远程版本库的最新更新取回到本地版本库,不会执行merge操作,会修改refs/remote内分支信息
git fetch origin xx/0.0.1
ssh免密配置访问
ssh-keygen -t ed25519 -C "email@example.com"
# 秘钥公钥在~/.ssh/id_ed25519及id_ed25519.pub中
.gitignore中存储需要被忽略而不推送到服务器的文件

某分支下专门写注释学习
git worktree add ../project-a a
object
- commit:存储提交信息,一个 commit 对应唯一版本的代码,可找到 tree ID
- tree:存储文件目录信息,可获取不同 blob ID
- blob:存储文件内容
- tag
Refs
Refs中存储对应的commit ID
refs/heads
前缀表示分支,refs/tags
前缀表示标签
研发
github
- 一个主干分支,基于Pull Request往主干分支提交代码
- owner外用户Fork创建自己仓库进行开发
Vscode
记录与 git 对应命令
- Changes 里文件 “+” 放到 Staged Changes :
git add .
√ + message
:git commit -m "message"