git基本操作
整理git的基础操作
写在前面
- 当你使用
ssh链接
时, 注意要生成自己的ssh公钥
, 否则无法推送, 报错权限不够 可参考文章github+ssh访问远程 - 本地分支最好和远程分支名一样, 便于管理
- 不想用
CLI
, 几款优质GUI
推荐 - 了解关于
git签名
的GPG
, 了解一下 - 代码要经行小块提交, 不提交没有编译过或构建失败的源码
普通分支拉取到本地
# 查看仓库所有分支
git branch -a
# 新拉取特定远程分支
git clone -b 分支名 url
# 一步拉取全部分支
git branch -r | grep -v '\->' | while read remote; do git branch --track "${remote#origin/}" "$remote"; done
# 补充拉取远程远程分支内容(建立新分支)
git checkout -b 分支名 origin/分支名
# 强制远程覆盖本地
git fetch --all
git reset --hard origin/master
关联远程分支与本地分支
git branch --set-upstream-to=origin/远程分支 本地分支
链接远程仓库
git remote add origin url
submodule子模块
拉取
# 克隆项目时递归克隆所有模块
git clone 地址 文件夹名 --recursive(--recurse-submodules)
# 后补充子模块部分
git submodule update --init --recursive
创建&更新
# 创建子库
git submodule add -b master [URL]
# 更新子库
git submodule update --init
移除子模块管理
git rm --cached 子模块名称
rm .gitmodules # 删除项目目录下.gitmodules文件
(强制)推送分支到远程
# 新推送到远程一个新分支
git push origin 本地分支名:远程分支名
# 如果远程仓库是新建的, 可以使用-u
git push origin -u test
# 强制推送分支: 强制推送且检查该分支是否单人开发
git push origin --force-with-lease master
# 当如上强制推送不成功, 依旧有内容冲突的时候, 可以使用-f
git push origin -f test
删除分支(远程+本地)
git push -d origin 远程分支名
git branch -d 本地分支名
查看内容提交记录
git status
查看当前暂存区状态git reflog
查看所有的提交git log --all --decorate --oneline --graph
可视化观察分支记录
add添加
git add . # 所有变化提交暂存, 包括内容修改(modified)以及新文件(new)
git add -u # 仅监控已被 add的文件, 不包括新文件, --update
git add -A # 以上功能合集
stash内存暂存
当你出现需要临时切换分支工作时, 若当前分支已近有部分修改, 不要直接切换, 未经过版本管理的内容, 不会跟随转变, 若你还不想提交
commit
, 可以使用git stash
# 保存快照
# 此时工作空间内容会复位
git stash save ""
# 显示快照差异
git stash show stash@{1}
# 恢复快照1
git stash list
git stash apply stash@{0} # 不会删除堆栈内容, 可重复恢复
# 恢复快照2
git stash pop # 只能恢复一次
# 删除快照
git stash drop 名称 # 堆栈中移除某个指定的stash
git stash clear # 清除堆栈中的所有内容