约定
- 示例命令中的origin都属于远程仓库名称,master,branch_name,new_branch_name属于分支名称
- 没有特殊说明,命令都是基于git bash测试
命令汇总
- git init : 在本地初始化一个全新的仓库
- git clone : 克隆远程仓库到本地
- git checkout : 切换分支
- git branch : 查/删/创建分支
- git commit : 提交,当前暂存区文件改动,产生一个新的版本
- git add : 跟踪,将指定的文件添加至暂存区
- git push : 推送,将本地改动推送至远程
- git pull : 拉取远程仓库信息并合并到当前分支
- git fetch : 拉取远程仓库信息
- git merge : 合并分支代码
- git tag : 查看删除创建标签
最佳实践
- 创建仓库通过clone命令初始化
- 本地分支最好通过命令“git checkout -b branchName remote/branchName”创建,这样创建出来的本地分支自动跟踪远程分支,且新分支记录与远程分支记录一致
初始化仓库
-
克隆远程仓库到本地
- clone命令: git clone github.com/jonasyuk/xx…
-
将本地仓库与远程仓库相关联
- 通过命令行进入到对应的目录下
- init命令初始化本地仓库: git init
- remote命令给本地仓库添加远程仓库: git remote add origin github.com/jonasyuk/xx…
- chekcout命令基于远程分支创建本地分支: git checkout -b master origin/master
- pull命令拉取远程最新代码: git pull
-
将本地仓库(具有本地的提交记录且与远程不一致)与远程仓库相关联,并进行合并关联(以master为例)
- 通过命令行进入到对应的目录下
- remote命令给本地仓库添加远程仓库: git remote add origin github.com/jonasyuk/xx…
- master分支: git checkout master
- branch命令映射远程分支:git branch -u origin/master master
- pull命令同步远程代码至本地: git pull
-
本地仓库已有一部分历史记录,与远程仓库重新连接(适用于“远程仓库迁移后重新绑定”,“不小心删掉远程仓库信息”,"在保留原远程仓库的情况下,额外增加一个远程仓库并将本地分支默认指向它-示例")
- 通过命令行进入到对应的目录下(假设该目录已经存在master提交记录)
- remote命令更新添加/更新远程仓库: git remote add new_origin github.com/jonasyuk/xx…
- fetch命令同步远程所有分支至本地: git fetch
- 遍历本地仓库分支名,将远程其映射至远程分支: for brname in
git branch --format="%(refname:short)"; do git branch -u origin/$brname $brname; done;
分支操作-增删查改
- 查
- 查看本地所有分支: git branch -l
- 查看远程所有分支: git branch -r
- 同时查看远程跟本地所有分支:git branch -a
- 查看包含某个commit的所有分支: git branch -a --contains commit_hash
- 增
- 基于当前记录分支创建本地分支: git branch new_branch_name
- 基于本地某个分支创建本地分支: git checkout -b new_branch_name branch_name
- 基于当前记录分支创建远程分支: git push origin HEAD:branch_name
- 基于本地某个分支创建远程分支: git push origin local_branch_name:new_branch_name
- 删
- 删除本地分支:git branch -D branch_name
- 批量删除本地分支: git branch -D branch_name_1 branch_name_2
- 删除远程分支:git push origin --delete branch_name
- 删除远程分支2:git push origin :branch_name
- 批量删除远程分支:git push origin :branch_name_1 :branch_name_2
- 改
- 切换分支: git checkout branch_name
- 切换至远程分支位置(会导致HEAD指针处于游离状态): git checkout origin/branch_name
- 切换至远程分支并在本地创建同名分支: git checkout -b branch_name origin/branch_name
同步远程分支信息
- 拉取当前分支关联的远程仓库所有分支信息: git fetch
- 拉取所有远程仓库的信息: git fetch --all
- 拉取指定远程仓库信息: git fetch origin
- 拉取默认远程分支信息并合并到当前分支下: git pull
- 拉取指定远程分支信息并合并到当前分支下: git pull origin branch_name
合并分支代码
- 合并本地分支:git merge branch_name
- 合并远程分支信息(pull = fetch + merge): git merge origin/branch_name
跟踪 & 提交 & 推送
- 查看当前状态: git status
- 添加改动文件到暂存区: git add .
- 提交代码: git commit -m"commit messaage"
- 推送到远程: git push
- 推送到远程指定分支: git push origin branch
- 推送到远程并关联分支: git push -u origin branch
标签(tag)
- 创建标签:git tag tag_name
- 推送tag至远程: git push origin tag tab_name
- 将HEAD指针指向远程tag位置: git checkout tags/tag_name
- 删除本地标签: git tag
- 删除远程标签: git push origin --delete tag tag_name
查看提交信息
- 查看提交日志: git log
- 查看最近两次的提交及改动内容: git log -p -2
- 查看提交日志及每次提交的简要改动信息: git log --stat
- 格式化信息(只展示hash(%h)跟提交信息(%s))及图形化查看提交日志: git log --pretty=format:"%h %s" --graph
仓库迁移
- 迁移(备份+恢复)
- clone命令将仓库镜像备份到本地: git clone --mirror github.com/jonasyuk/xx…
- 进入到对应目录: cd xxxx
- 修改镜像仓库配置: git config --bool core.bare false
- 重置所有改动: git reset --hard
- 设置新的远程仓库: git remote add origin github.com/jonasyuk/xx…
- 推送所有分支: git push -u origin --all
- 推送所有标签: git push -u origin --tags
参考链接
- git官方文档: git-scm.com/docs
- 廖雪峰git博客: www.liaoxuefeng.com/wiki/896043…