基础用法
标准流程
git status 查看工作状态
git add xxx 跟踪新文件、将已修改的文件放入暂存区、标记文件冲突已解决
git commit -m “提交代码” 推送修改暂存区内容到本地git库中
git pull 拉取最新代码,与本地代码合并,解决冲突
git push 提交本地仓库到远程仓库
git仓库
git协议
Local 本地协议
优点:创建简单,依靠局域网共享文件系统进行访问,使用本地的文件权限与网络权限进行管理。
缺点:共享文件系统配置复杂,远程访问不方便,权限配置不方便
/srv/git/project.git 本地库硬链接
file:///srv/git/project.git 类似网络传输连接
HTTP
智能HTTP协议 新版本,普遍使用
哑(Dumb)HTTP协议
SSH
优点:架设对于专业人员简单,用户需要密匙访问
Git
优点:简单快速
创建远程仓库
git init 初始化仓库
git config receive.denyCurrentBranch ignore 设置当前仓库为远程仓库
关联本地仓库到远程仓库
git init
git remote add origin D:\GitServer
git remote add origin ssh://[username]@1.1.1.1:22/home/gitserver
git add .
git commit -m “clone下来的源码”
git push -u origin master 指定推送到origin仓库的master分支
管理远程仓库
git remote 显示现有远程的列表
-v 显示详细详细
add
remove
rename
创建本地仓库
git clone (url) 克隆远程仓库
Git clone http://用户名@125.01.02.03:10086/test/xiangmu.git 无法找到仓库时需要加入用户名称再拉取(输入密码后即拉取代码成功)
–depth <深度> 创建”浅”克隆,忽略历史提交,仅克隆master分支最新版本,建议开发时不要使用这个选项
git pull –unshallow 拉取历史提交,使浅仓库变为与源仓库相同
git config remote.origin.fetch “+refs/heads/:refs/remotes/origin/“ 修改分支配置选项为关联多个分支
git分支
切换分支
git checkout
. 切换到当前分支(放弃工作区中全部的修改)
(branchname) 切换到branchname分支。注意需要stash当前的工作区。未关联文件不受影响
–orphan (branchname) 创建一个空分支
-b (branchname) 创建并切换到新的分支.
-b (branchname) (tagname) 基于某个标签对应的版本创建并切换到新的分支.
-b (branchname) (hash) 基于某个hash对应的版本创建并切换到新的分支.
–track origin/master 切换到指定的远程分支
文件版本回退
git checkout 提交hash值 文件或文件名
分支管理
分支查看,创建,删除
git branch 列出本地的分支
-r 列出远程分支
-a 列出远程跟踪的分支和本地分支
-d (branchname) 删除本地分支
-vv 查看本地分支与对应的跟踪分支
–merged 检查哪些分支已合并到主分支
–no-merged 检查未合并到主分支的分支
git branch (branchname) 创建分支
分支同步
git push origin –delete (branchname) 删除远程分支
git push origin (branchname):(branchname) 推送本地分支到远程分支(新建远程分支)
git fetch 更新远程分支
分支合并
git merge (branchname) 合并某分支到当前分支
遇到冲突时,修改代码解决冲突
git status 查看unmerged状态的文件
git add (filename) 标记文件冲突已解决
git commit 解决完成冲突之后执行commit操作,提交本次merge行为
git rebase 变基操作,将一个分支的修改在另一个分支重新修改一遍
Git - 变基 (git-scm.com)
master 将当前分支变基到master分支
–onto master branch1 branch2 当主分支上分离出branch1, branch1上分离出branch2,
并且branch2完成开发后需要将branch2合并到master,但是保留branch1不变时执行命令,
具体含义为取出brach2分支,找出它从brach1分支分歧之后的修改,并应用到master分支
git cherry-pick (hash) 将指定的commit应用于当前分支
git cherry-pick hashA..hashB 将A到B之间的所有提交应用到当前分支
-e 修复commit信息
标签
git tag 查看标签
-l “通配符” 使用通配符查找标签
(v0.1) 创建轻量标签
-a (v0.1) -m “注释” 创建附注标签
-a (v0.1) -m “注释” hsah 向指定版本创建附注标签
-d (v0.1) 删除标签
git show (v0.1) 查看标签对应的版本信息
git push origin –tags 提交本地创建的所有标签
git push origin –delete
git工作树
移动或删除
git mv <源文件> <目标文件>移动或重命名文件
-f 强制移动(覆盖)
-k 跳过错误操作
-v 显示详细信息
git reset 删除的是已跟踪的文件,将已commit的回退。
–hard
–soft
git clean 删除未跟踪的文件
-n 不实际删除,只是进行演练,展示将要进行的操作,有哪些文件将要被删除。(可先使用该命令参数,然后再决定是否执行)
-f 删除文件
-i 显示将要删除的文件
-d 递归删除目录及文件(未跟踪的)
-q 仅显示错误,成功删除的文件不显示
-x 也删除被忽略的文档
-X 仅删除被忽略的文档
示例:
-df 返回到某个节点,(未跟踪文件的删除)
-nxdf (查看要删除的文件及目录,确认无误后再使用上面的命令进行删除)
查询
git status 工作树状态
-s 以简短的形式给出输出,左侧为暂存区状态,右侧为工作区状态
-u 显示未追踪文件
–ignored 显示被忽略的文件
输出提示:
‘’ 未修改的
M 已修改
T 文件类型改变
A 添加
D 删除
R 重新命名
C 被复制
U 更新但未合并
? 未被追踪的
! 忽略不计
git ls-files 显示工作目录中的文件信息
-o,–others 在输出中显示其他(即未跟踪)文件
–exclude-standard 不显示标准的 Git 排除文件:.git/info/exclude、每个目录中的 .gitignore,以及用户的全局排除文件。
git check-ignore
-v 文件名 输出文件被排除的位置
git stash 暂存工作区修改
pop 应用上一次暂存文件并删除暂存记录
list 显示暂存记录
修改提交
git commit –amend 修改commit信息
git commit –amend –author=”name <abc@qq.com>” –no-edit 修改commit作者、邮箱
git commit -a –amend –no-edit 重新修改代码并提交,替换掉最后一次提交
修改已提交的内容:
Git - 重写历史 (git-scm.com)
基于git rebase -i选项,自某个版本开始,重写之后的所有提交,功能强大但是影响巨大
通过交互式命令行完成,支持修改commit信息、修改commit顺序、压缩提交、拆分提交等
在服务器上完成变基后,其它人需要使用git pull –rebase自动识别服务器的变基修改并在本地完成自动变基
基于git filter-branch功能,可以更加自由的修改任何历史信息,但是指令比较复杂
配置文件
git config –global core.autocrlf false 关闭warning: LF 报错
git config –global –list 查看全局配置
git config –list 查看本地配置
git config –list –show-origin 显示所有配置
git凭证,需要在windows的凭证管理器中删除旧凭证,然后重新clone代码
git config –global user.name “unreal engine consumer” 全局修改用户名称
git config user.email “2252313806@qq.com“ 当前仓库修改用户名称
特殊应用
git解决冲突
git status 查看工作树状态
手动解决冲突
1. git checkout –ours
2. git checkout –theirs
3. 手动修改
4. git revert
在rebase中 基准分支是master
在merge中基准分支是当前分支
git add
git commit -m “xxx” 提交到本地仓库
git status 检查工作树状态
git pull –rebase 在本地完成分支合并,避免仓库上多条分支线
git push 提交到远程仓库
子模块
git submodule add https://xxx/gittest.git src/gittest 添加子模块
git submodule update –init –recursive 下载子模块
忽略文件
全局配置文件(~/.gitignore)
远程配置文件($PWD/.gitignore)
本地配置文件($PWD/.git/info/exlude)
git与GitHub关联
ssh-keygen -t rsa -C “2252313806@qq.com“ 生成SSH密匙
将生成文件里的公匙配置到GitHub setting SSH keys里面
ssh -T git@github.com 验证SSH连接
git代码从一个仓库移动到另一个仓库
git remote add
git remote add
git pull branch1 master 拉取第一个仓库的提交
git push -u origin2 master 提交到第二个仓库
其它
git gc 压缩.git文件,将全量保存的历史版本改为部分全量部分保存差异
–aggressive 更高的压缩比例,效果有限,不推荐
修复中文文件乱码
git config –global core.quotepath false
mingw64区域右键->Options->Text->Locale->zh_CN
.git文件
config
项目配置选项
description 描述/说明
GitWeb程序相关
HEDA
文件目前被检出的分支
hooks/
客户端或服务器的钩子脚本,默认提供多种示例
info/
包含一个exclude文件,记录本地排除文件
objects/
对象数据库,存储所有数据内容
refs/
存储指向数据(分支、仓库、标签等)的指针