Git工作区
分布式版本控制系统
工作区提交到暂存区
基本命令
账户/邮箱
安装Git后需配置email和name才可以使用
// 设置邮箱
git config --global user.email "你的邮箱"
// 设置名称
git config --global user.name "你的名称"
// 查看邮箱
git config user.email
// 查看用户名
git config user.name
提交/日志/版本信息命令
在工作区新建hello.java文件
// 提交到暂存区
git add hello.java
// 提交到提交区
git commit -m "备注信息"
// 查看状态
git status
// 查看日志
git log
// 查看简化的提交日志
git log --pretty=oneline
// 回到最新版本(如果需要撤销add操作,需要先回到最新commit id上)
git reset --hard HEAD
// 回退上一版本
git reset --hard HEAD^
// 回退上上一版本
git reset --hard HEAD^^
// 回退指定版本
git reset --hard "commit id"
// 查看所有提交过的日志
git reflog
// 提交所有文件到暂存区
git add .
暂存区撤销命令
撤销git add
// 提交hello.java到暂存区
git add hello.java
// 对hello.java撤销清空暂存区
git checkout -- hello.java
撤销git add .
// 所有文件提交到暂存区
git add .
// 对hello.java文件撤销清空暂存区
git reset HEAD hello.java
git checkout -- hello.java
提交区撤销命令
撤销git commit
// 提交到暂存区
git add hello.java
// 提交到提交区
git commit hello.java
// 回退上一版本
git reset --hard HEAD^
// 回退上上一版本
git reset --hard HEAD^^
// 回退指定版本
git reset --hard "commit id"
分支
在不同的分支上进行的版本管理,只有在自己的分支上才会生效
新建分支
新建aubynlan分支
git checkout -b aubynlan
查看分支
git branch可以看到目前有的分支情况(*表示当前所在分支)
git branch
切换分支
- 注意:切换分支也可以用
git switch命令,如,切换到master分支:git switch master
// 切换到主分支
git checkout master
// 切换aubynlan分支
git checkout aubynlan
删除分支
删除分支aubynlan分支,需要先切换到主分支
git checkout master
git branch -d aubynlan
强制删除
如有文件未提交git branch -d aubynlan会报错此时可以执行强制删除
git branch -D aubynlan
分支合并
快速合并
// 先切换主分支
git checkout master
// 把aubynlan分支合并到master分支
git merge aubynlan
// 删除aubynlan分支
git branch -d aubynlan
// 查看log发现合并后提交的commit id(aubynlan已合并到master分支上)
git log
合并冲突
假设新建aubynlan和jack两个分支,并且他们修改了同一个文件文件同一行的记录之后分别合并到主分支
新建分支
git checkout命令加上-b参数,相当于创建并切换,新建jack、aubynlan分支
git checkout -b jack
git checkout -b aubynlan
合并分支
合并aubynlan分支和jack分支
git checkout master
git merge aubynlan
git merge jack
冲突现象
aubynlan先提交,jack后提交发现冲突
...
原文件内容
<<<<<<<<<< HEAD
...
aubynlan合并的内容
==============
...
jack合并的内容
>>>>>>>>>>>>> jack
合并冲突
合并冲突需要手动处理,保存jack和aubynlan的内容,并且再次add、commit、merage命令
...
原文件内容
...
aubynlan合并的内容
...
jack合并的内容
get add hello.java
get commit hello.java "解决冲突后再提交信息"
git checkout master
git merge jack
分支管理策略
合并分支是Git默认用Fast forward模式,删除分支后,会丢掉分支信息。如果强制禁用Fast forward模式,Git就会在merge是生成一个新的commit,这样可以从分支历史看出分支信息。强制禁用Fast forward模式参数--no-ff,全命令git merge --no-ff -m "合并分支" aubynlan,实战:
// 切换aubynlan分支
git switch -c aubynlan
// 提交到暂存区
git add hello.java
// 提交到提交区
git commit -m "add merge"
// 切换到master分区
git sitch master
// 合并分支
git merge --no-ff -m "merge with no ff" aubynlan
Bug分支
当前正在dev分支执行开发任务,先当前dev分支工作状态使用git stash命令贮藏起来,此时输入git status查看工作区是干净的。如果需要在master分支修改bug100,就从master分支创建一个bug100分支:
// 贮藏当前分支
git stash
// 切换master分支
git checkout master
// 新建并切换到bug100分支修改bug
git checkout -b bug100
// 保存到暂存区
git add bug.java
// 保存到提交区
git commit -m "修复bug100"
修复完成后,切换到master分支合并bug100分支,最后删除bug100分支:
// 切换到master分支
git switch master
// 合并修复bug100后的内容到master分支
git merge --no-ff -m "merged bu fix bug100" bug100
恢复dev分支状态,继续未完成的开发任务,git stash list查看暂存的工作列表。用git stash apply恢复,stash内容不删除,需要用git stash drop来删除;另一种方式是git stash pop,恢复的同时把stash内容也删除:
// 显示贮藏列表
git stash list
git stash pop
恢复指定的贮藏分支git stash apply stash@{0},@{0}分支编号,在git stash list列表查看
git stash apply stash@{0}
把特定分支合并到当前dev分支,如:当前的master分区修改了bug100,现在想要把master分支合并了bug100的代码,合并到当前的dev分支,注意:只是复制bug100,提交id是a32f34这个提交所做的修改,不是把整个master分支合并。使用cherry-pick命令,能复制一个特定的提交到当前分支:
git switch dev
git cherry-pick a32f34
配置
- 全局级别:当前用户之下
- 系统级别:git安装目录下etc
查看
// 系统级别
git config --system -l
// 仓库级别
git config --local -l
// 全局级别
git config --global -l
编辑
// 仓库级别
git config --system -e
// 仓库级别
git config --local -e
// 全局级别
git config --global -e
增加/删除
// 增加
git config --global --add aubynlan
// 删除
git config --global --unset user.name
命令别名
git status别名git stgit log --pretty=oneline别名git.lgo
// git st
git config --global alias.st status
// git.lgo
git config --global slias.lgo log --pretty=oneline
标签
标签列表
查看标签列表git tag
git tag
增标签
给commit id为2f4351c的版本打上v1标签
git v1 2f4351c
git tag v1
删除标签
删除v1标签
git tag -d v1
忽略文件
搭建gitlab私有仓库(鼓泡社区安装教程)
一台公共搭建远程参仓库
远程仓库
- 想要与远程库关联必须要先在远程库增加本机的sshkey,这样才有权限访问
生成ssh key
xxx@xx.com这里写你自己的邮箱
ssh-keygen -t rsa -C "xxx@xx.com"
从远程库克隆
git@github.comxxxxxx.git这里写你自己的远程仓库地址
git clone git@github.comxxxxxx.git
添加远程库
添加远程仓库并设置仓库名为origin,注意,仓库地址git@github.comxxxxxxxxx这个地址需要改成你们项目的仓库地址。如果仓库是空的,首次推送需要使用git push -u命令,Git会把本地master分支和远程master分支关联起来,以后推送或者拉取可以简化命令git push ,而不需要-u参数
// 设置远程仓库
git remote add origin git@github.comxxxxxxxxx
// 把本地master分支推送到远程仓库的master分支
git push -u origin master
// 推送到aubynlan分支
git push -u origin aubynlan
// 远程仓库和本地仓库版本不一致,需要先git pull,把远程仓库最新版本拉到本地,有冲突则手动解决
git pull
状态解析
git status
1.nothing to commit:没有需要提交的
2.Untracked files:新建文件后,未被追踪的文件
3.changes to be committed:执行git add命令之后,等待被提交
4.nothing to commit:执行git commit命令之后
主分支与开发分支
实际项目中,公司搭建的GitLab,代码一般分为两个分支:主分支master和开发分支dev,我们clone代码的时候,是git地址是master分支的地址。这时候要注意了,普通开发人员一般没有权限推送代码到master分支,只能推送到dev分支,之后在GitLab中向申请合并代码到master分支。所有开发人员开发在dev分支的基础上开发。
// 本地新建dev分支并从远程dev分支拉取代码
git checkout -b dev remotes/origin/dev
git add .
git commit -m "测试"
// 推送代码到远程dev分区
git push -u origin dev