Git版本控制器——记录每一次修改以及版本迭代的一个管理系统
可以控制电脑上所有格式的文档
linux下配置git
centos
当前是否安装git命令 git --version
卸载git命令 sudo yum remove git -y
安 装git命令 sudo yum install git -y
git基本操作
配置本地仓库
创建本地仓库 git init 创建.git文件 可以用tree查看.git分支
配置用户名 git config user.name " "
配置邮箱 git config user.email " "
查看配置 git config -l
删除配置 git config unset user.name git config unset user.email
全局配置 git config --global user.name " "
删除全局配置 git config --global --unset user.name" "
用户姓名邮箱要对应码云用户名@以后的 和码云的邮箱
认识工作区、暂存区、版本库
工作区:写代码和文件的目录
暂存区(stage/index):一般存放在.git目录下的index文件(.git/index)中,我们把暂存区有时也叫做索引
版本库:即仓库。工作区有一个隐藏目录.git,它不算工作区,而是Git的版本库。这个版本库里面的所有文件都可以被Git管理起来,每个文件的修改、删除,Git都能跟踪,以便任何时候都可以追踪历史,或者在将来还原。
object:对象库,修改的工作区内容会写入对象库的一个新的git对象中
添加文件
添加指定文件 git add 文件名
添加当前目录下所有文件 git add .
添加描述 git commit -m “描述”
提交记录日志 git log 简易显示 git log --pretty=oneline
提交文件.git的变化
通过commit id查看文件指令:git cat-file -p 79931091b9d88e80b66b8e92868933b7b57ed0d5
[root@iZ0jlicx4mlu7p01u4m4tuZ gitcode]# tree .git
.git
├── branches
├── COMMIT_EDITMSG
├── config
├── description
├── HEAD
├── hooks
│ ├── applypatch-msg.sample
│ ├── commit-msg.sample
│ ├── fsmonitor-watchman.sample
│ ├── post-update.sample
│ ├── pre-applypatch.sample
│ ├── pre-commit.sample
│ ├── pre-merge-commit.sample
│ ├── prepare-commit-msg.sample
│ ├── pre-push.sample
│ ├── pre-rebase.sample
│ ├── pre-receive.sample
│ ├── push-to-checkout.sample
│ └── update.sample
├── index
├── info
│ └── exclude
├── logs
│ ├── HEAD
│ └── refs
│ └── heads
│ └── master
├── objects
│ ├── 07
│ │ └── 5277083bbdfe95d4181675c8c335c5a5c8cb72
│ ├── 0e
│ │ └── 6b1780b73cd9220ec5073dc64b42f7ad4bd945
│ ├── 79
│ │ └── 931091b9d88e80b66b8e92868933b7b57ed0d5
│ ├── 8d
│ │ └── 0e41234f24b6da002d962a26c2495ea16a425f
│ ├── cb
│ │ └── 6d5a042adc7874f7d4ee68ed21025dab3a2be9
│ ├── e6
│ │ └── 9de29bb2d1d6434b8b29ae775ad8c2e48c5391
│ ├── info
│ └── pack
└── refs
├── heads
│ └── master
└── tags
通过.git的内部树状结构来看,
index存放add新增文件内容,HEAD是一个指针指向了refs/heads/master,refs/heads/master存放了最新提交的commit id
commit id可看做是一个索引,索引的是一个git对象,对象是维护在对象库中。
修改文件
Git追踪管理的修改,而不是文件。
查看当前仓库状态的命令:git status
显示暂存区和工作区差异命令:git diff 文件名
a/ReadMe 表示的是改动前 b/ReadMe 表示的是改动后
版本回退
版本回退命令:git reset [--soft | --mixed | --hear] [HEAD] 本质是回退版本库中的内容。
工作区和暂存区是否回退取决选项
--soft选项 只回退版本库内容
--mixed选项(默认选项) 版本库和暂存库内容回退
--hard选项 工作区、版本库、暂存区都回退
git reset HEAD回退到当前版本 HEAD^上一个版本 HEAD^^上两个版本
回退日志:git reflog
撤销修改
撤销的目的不影响远程仓库
情况一:对于工作区的代码,还没有add
将工作区文件回退到最近一次add:git checkout -- 文件名
情况二:add了 但没有commit
使用版本回退 回退到当前版本 git reset HEAD
再使用git checkout -- 文件
情况三: 完成了add和commit
git reset --hard HEAD^
删除文件
1 rm 要删除的文件名
2 git add 要删除的文件名
3 git commit -m "描述"
或者 git rm 要删除的文件名 git commit -m " "
分支管理
创建分支
查看当前本地所有分支 git branch
HEAD可以指向分支 被指向的分支就是当前正在工作的分支
创建分支命令 git branch 分支名
切换分支
命令 git checkout 分支名
创建并切换分支指令:git checkout -b 分支名
合并分支
把dev分支合并到master分支
1切换到master分支
2使用合并分支指令 git merge 分支名
合并时不使用fast forward模式 git merge --no-ff -m "描述" 分支名
删除分支
删除分支只能在其他分支删除它
命令: git branch -d 分支名
合并冲突
合并冲突需要手动解决 并进行一次提交
图示化查看提交指令 git log --graph -abbrev-commit
bug分支
将所在分支工作区的内容进行保存 git stash
git stash 只能保存被.git追踪管理的文件
git stash list 查看stash区存储了什么文件
将保存在stash的内容释放 git stash pop
一个分支点分出两个分支一个修bug一个新业务,bug修完合并,新业务代码合并主分支时应先用业务代码合并主分支如果有冲突解决冲突保证不出错,然后主分支合并新业务不会发生分支冲突
强制删除分支
指令 git branch -D 分支名
远程操作
新建远程仓库
远程仓库有自己的成员,一般来说管理者、开发者、观察者、报告者
Issues模板文件:让有问题的人与当前仓库成员进行交流
Pull Requests模板文件:开发者进行一个合并申请单给仓库管理员
克隆远程仓库
一 HTTPS
指令 git clone https网址
这个命令不能在本地仓库执行即文件夹已经有.git
origin是远程仓库的默认名字
git remote指令可以得到远程仓库的默认名字
git remote -v 指令可以获取更多远程仓库信息
二 SSH 使用公钥加密 公钥登录
在root用户.ssh文件夹内创建id_rsa 和 id_rsa.pub
使用命令ssh-keygen -t rsa -C "自己邮箱"
向远程仓库推送 push
git add 文件名
git commit -m "描述"
git push origin(远程仓库名) master(本地分支名):master(远程分支名) (如果本地分支名和远程分支名一样可以不写:master)
拉取远程仓库 pull
pull是拉取加合并
git pull origin(远程仓库名) master(远程分支名):master(本地分支名) (如果本地分支名和远程分支名一样可以不写:master)
忽略特殊文件
.gitignore模板
创建.gitignore
编辑*.so *.ini 等等就忽略这些文件
git add -f 文件名 可以强制提交
!b.so可以不忽略b.so b.so 可以上传
git check-ignore -v 文件名 查看此文件为什么被忽略
配置命令别名
例如:git status 起别名为 git st
命令 git config --global(全局) alias.st(别名) status(原名)
git log --pretty=oneline --abbrev-commit
起别名
git config --global alias.lpa 'log --pretty=oneline --abbrev-commit'