Git使用总结
文章目录
Git使用总结Git介绍Git安装Win版本安装Linux版本安装yum命令安装方式编译Git源码安装
Git命令常用命令--本地仓库常用命令--远程仓库git生命周期状态
Git的图形化工具SourceTreeeSourceTree安装SourceTree使用
Git分支使用分支Git的log日志
Git冲突问题git diff比较差异git更改提交分子冲突解决Git 标签
GitBlit搭建启动使用用户使用gitignore文件的使用
Git介绍
Git是一个分布式版本控制软件,作者:林纳斯·托瓦兹(同时也是Linux内核创始人)Git的主要作用:版本控制,团队协作。同类型软件:SVN,CVSGit与SVN对比
Git安装
官方网址:http://git-scm.com
Win版本安装
下载好后,直接默认安装就可以了。
Linux版本安装
yum命令安装方式
yum安装,安装的不是最新的,如果需要安装最新的需要编译安装
yum
install git
编译Git源码安装
git镜像地址:https://mirrors.edge.kernel.org/pub/software/scm/git/安装git依赖项(这一步不需要做,安装Git时会提示,直接选择Y)
yum
install curl-devel expat-devel gettext-devel openssl-devel zlib-devel
yum
install gcc perl-ExtUtils-MakeMaker
移除已经安装的git
yum remove
git
解压下载包
tar -zxvf git.tar.gz -C /usr/local
预编译Git(进入解压目录)
./configure --prefix
=/usr/local/git
编译并安装git
make && make install
将git的脚本软连接到/usr/bin/ 目录下(就是桌面快捷方式)
ln -s /usr/local/git/bin/* /usr/bin/
Git命令
常用命令–本地仓库
查看git版本号
git --version
git帮助文档
git --help
git +命令 --help #通过浏览器查看某个命令的帮助文档。例如:git add --help
生成空的本地仓库
git init
将文件添加到暂存区
git add ceshi.txt
git 的commit命令—commit是将暂存区提交到本地仓库
git commit -m xxx
git 初次提交前需要配置邮箱和用户名
#配置邮箱和用户名
git config --global user.email "xxx@email.com" #例如: git config --global user.email "zky@163.com"
git config --global user.name "xxx" #例如:git config --global user.name "zhang"
常用命令–远程仓库
查看git远程使用文档
git remote --help
git推送命令步骤
mkdir git-test # 创建一个git-test文件
cd git-test # 切换到git-test文件
git init # 初始化git
touch README.md # 生成README.md文档
git add README.md # 添加到本地缓存里面,如果添加所有需要
git add -A # 表示添加所有内容=git add *
git add -A . #表示添加所有改变的文件
git add . # 表示添加新文件和编辑过的文件,不包含删除的文件,并且会根据.ignored过滤
git add -u # 表示添加编辑过的文件或者删除的文件,但是不包含新添加的文件
git add xx.xx #表示添加xx文件到缓存区
git commit -m "first commit" # 提交到本地仓库,后面是说明
git remote add origin https://gitee.com/destroy_god_zc/git-test.git # 与远程仓库节点建立连接
git push -u origin master # 推送到远程仓库。-u参数为:--set-upstream 为节点跟踪的意思,一次设置后,后续不需要带参数了。
git拉取代码
git fetch # 拉取分支到本地仓库
git merge origin/master #将远程的变更合并到本地仓库的master分支
# 上面两条等同于下面一条命令
git pull # 不建议使用,表示强制合并到本地。
git的整体流程图
git生命周期状态
git的状态序列图
新建文件--》Untracked状态
使用add命令后将新建文件加入到暂存区---》staged
使用commit命令后将暂存区文件提交到本地仓库--Unmodified状态
如果对Unmodified状态的文件进行修改---》文件状态就会变成modified状态
如果对modified状态的文件进行rm操作,就会重新回到Untracked状态
git的状态
git status
git添加到暂存区后状态(staged)
git的删除操作
git rm --cache xxx.xx
git rm xxx.xx
git rm -rf --cached xxx
git checkout xx.xx
rm --cache操作,并未删除工作区
rm xx.xx操作会从工作区删除掉,但是通过checkout 分支 xx.xx 又能从缓存区拉回来
checkout操作,又恢复。checkout会覆盖之前内容。
modified状态:commit后,用户又对该文件修改会进入modify状态,需要再次add,commit操作
Git的图形化工具SourceTreee
SourceTree安装
sourceTree下载地址安装无法绕过登录,需要进行处理:去到 C:\Users\当前用户目录\AppData\Local\Atlassian\SourceTree 目录下新建 accounts.json 文件 ,将下面内容复制进去并重启。
{
"title":"json在线解析(简版) -JSON在线解析",
"json.url":"https://www.sojson.com/simple_json.html",
"keywords":"json在线解析",
"功能":[
"JSON美化",
"JSON数据类型显示",
"JSON数组显示角标",
"高亮显示",
"错误提示",
{
"备注":[
"www.sojson.com",
"json.la"
]
}
],
"加入我们":{
"qq群":"259217951"
}
}
SourceTree使用
sourceTree添加项目
sourceTree提交内容
SourceTree推送
Git分支使用
分支
一张图来看分支
分支应用场景
1、解决bug建分支,不会对主支产生影响。
2、封装一个开放阶段
3、避面不同版本的影响,你开发不影响主分支的向前推进。
3. 创建分支
```git
git branch xxx # 创建分支
git branch # 列出所有分支,分支前面的*号,表示为当前分支
删除分支和修改分支名
git branch -d xxx # 注意不能删除当前分支
git branch -m 旧分支名 新分支名 # 修改分支名
切换分支:存在冲突点,分支切换前要提交,有丢失风险
git checkout 分支名 # 切换分支
# 注意:如果在分支中进行了修改,没有commit就切换到主分支,当你再切换回来时你之前写的分支内容有可能会丢失。
git checkout -f 分支名 # 表示进行强制切换,上一个分支如果没有提交内容会丢失的。谨慎使用此命令。
Git的log日志
git的提交日志
git log # 会显示出git每次提交的日志记录,包含sha校验码、作者、日期、提交时写的日志内容
git log -数字 #显示最近几次提交的内容
git log -p -2 # 显示最近两次提交的不同点
git log --author xxx #查看具体某个作者的提交
git log --oneline # 输出简要信息
git log --graph # 以一个简单线串联起整个提交历史
Git冲突问题
git diff比较差异
比较差异命令
git diff # 不加任何参数,用于比较当前工作区跟暂存区的差异
git diff --cached 或者 --staged # 表示比较工作区和暂存区的差异
git HEAD # 当前指针所处分支的工作区和暂存区差异
git diff # 分支名 查看当前分支跟指定分支的差异
git diff 分支1 分支2 # 查看两个分支的差异(已经提交的)
git diff 文件名 # 查看指定文件的工作区和暂存区的差异
git diff commid1 commitid2 # 列出两个历史提交的差异
git diff --stat # 用于罗列有变更的文件
git更改提交
将不必要的文件add上次提交有觉得有错误 :直接移除上一次提交,修改后重新提交上去不想改变暂存区内容,只想修改提交内容 :git reset --soft HEAD^版本回滚:gir reset 操作
git reset HEAD 文件名 # 移除不必要的添加到暂存区的文件
git reset HEAD^ # 或者 commitid 去掉上一次的提交
git reset --soft HEAD^ # 撤回后仍然在暂存区里面等待提交,可以修改提交的信息内容
git reset --soft # 表示撤回一次提交,但是暂存区和工作区都不会改变,只是将本地仓库里面的给删除了。
git reset --mixed # 表示撤回一次提交,但是工作区不会改变,暂存区恢复到上一次提交的状况。
git reset --hard # 工作区和暂存区都恢复到上一次提交的状况。即:你写的内容都会丢掉,当然有可能你真的不想要了。
撤回添加
撤回提交
对于^和~的精辟理解
^和~的精辟理解
^x: 尖头符号,形似箭头,表示要朝那个方向,始终是走一步,x 表示第几个岔路口,代表方向盘
~y: 波浪符号,表示要在该方向上走 y 步,始终沿着该方向,代表油门
分子冲突解决
合并命令
git merge 分支名
git diff --name-only --diff-filter
=U
产生冲突如何处理
1、冲突的制造:A分支和B分支修改了同样的文件,当A提交后,合并到master分支上,合并后B打算先拉取再提交,当拉取时出现了冲突,因为当前同一个文件修改的相同,处理方案:要么要你的,要么要他的,要么全部要(手动处理,删除)。处理后,再通过add,commit提交上去。(可以通过git diff --name-only --diff-filter=U定位冲突的文件)
Git 标签
标签命令
git tag 标签名
git tag 标签名 commitid
git show 标签名
git tag -d 标签名
git push 远程分支名 标签名
删除远程标签
git tag -d 标签名
git push origin :refs/tags/标签名
GitBlit搭建
下载地址参考链接1参考链接2参考链接3
启动使用
配置参数:gitblit-1.9.1/data/default.properties,这里定死了就这个端口
server
.httpPort=7070
server
.httpsProt=7071
server
.shutdownPort=7072
server
.httpBindInterface =xxx
.xxx
.xxx
.xxx
编辑启动参数:vim service-ubuntu.sh
GITBLIT_PATH
=/home/ubuntu/git-blit/gitblit-1.9.1
GITBLIT_BASE_FOLDER
=/home/ubuntu/git-blit/gitblit-1.9.1/data
启动命令
nohup java -cp
"gitblit.jar:ext/*" com.gitblit.GitBlitServer --baseFolder data
&>/home/ubuntu/git-blit/gitblit-1.9.1/log/log.out
&
用户使用
创建用户
用户中心配置git公钥
# git公钥生成
git config global user.name "你的用户名"
git config global user.email "你填的邮箱"
ssh-keygen -t rsa -C "你填的邮箱"
#复制id_rsa.pub文件的全部内容,粘贴到ssh keys中
创建仓库
初始化使用仓库
touch README.md
git init
git add README.md
git commit -m "first commit"
git remote add origin ssh://zhangkaifan@192.168.1.195:29418/testOne.git
git push -u origin master
git remote add origin ssh://zhangkaifan@192.168.1.195:29418/testOne.git
git push -u origin master
gitignore文件的使用
参考文档目的很简单,用户上传的文件不应该什么都包含,应该精简一些。比如去掉.idea,.iml,target文件。gitignore在用户add到暂存区时,进行过滤的。通过配置会过滤掉不准备push的内容配置
# 当个配置
git config core.excludesfile .gitignore
# 全局配置
git config --global core.excludesfile ~/.gitignore
# 提交的时候,采用git add .方式提交,会默认通过.gitignore进行过滤
.gitignore只能忽略原来没有被跟踪的文件
如果已经add甚至提交到本地仓库了,可以通过untrack的方法重新add git rm -r --cached . git add . git commit -m “update .gitignore”