Git基本操作
Git简介
-
Git是什么?
Git是目前世界上最流行的分布式版本控制系统
Git是在2005年,Linus花了两周的时间用C语言编写的分布式版本控制系统
所有的版本控制系统都只能跟踪文本文件的改动,比如txt文件、网页、所有的程序代码等等 -
集中式和分布式
版本库:英文repository,可以简单的理解为目录
集中式:版本库是集中存放在中央服务器里,每次干活需要从中央服务器里面取得最新的版本,干完活以后在上传到中央服务器里的版本库里。
缺点:需要网络、安全性不是很高
代表:CVS、SVN、VSS…
分布式:版本库是存放在个人的电脑里面,每次干活只需要在个人的电脑上修改,几个人修改一个文件只需要互相推送就行。
优点:不需要网络、安全性高
代表:Git、Mercurial、Bazaar…
回到顶部 目录
Git基本操作
-
设置用户名和邮箱
$ git config --global user.name "用户名"
$ git config --global user.email "邮箱地址"
-
创建版本库
- 选择合适的地方,创建一个文件夹(也可以手动创建,切换到当前文件地址)
切换路径:cd
创建文件夹:mkdir
显示当前文件路径:pwd
- 通过
git init
命令把这个目录变成git可以管理的仓库(此时会在当前位置生成一个隐藏的.git文件)
- 选择合适的地方,创建一个文件夹(也可以手动创建,切换到当前文件地址)
-
添加文件
- 使用命令
git add <flie>
,注意,可反复多次使用,添加多个文件;(没有任何消息就是成功) - 使用命令
git commit -m "message 提示信息"
,完成(成功会打印具体发生了怎么样的修改)
- 使用命令
-
文件监控
git status
命令可以让我们时刻掌握仓库当前的状态信息
git diff
命令可以让我们查看当前修改的信息 -
版本退回
HEAD
版本(当前版本)、HEAD^
上一个版本、HEAD^^
上上一个版本、HEAD~100
上100个项目
git reset --hard commit_id
命令可以在历史和未来之间随意的穿梭
git log
命令查看提交内容历史记录,可以用来穿越到古代
git reflog
命令查看操作命令的历史记录,可以用来回到未来 -
工作区和暂存区
- 工作区
创建版本库的文件目录,你操作文件的地址 - 版本库
工作区里面有一个隐藏文件**.git就是Git的版本库
版本库里面有很多东西,其中最主要的就是stage(或者叫index)的暂存区**;
还有Git为我们自动创建的第一个分支master,已经指向master的指针叫HEAD
Git的条件文件的两步:
第一步:git add
实际上就是把文件修改添加到暂存区
第二步:git commot
实际上就是把暂存区的所有内容提交到当前分支(也就是master分支)
- 工作区
-
撤销修改
git checkout --file
命令丢弃工作区的修改,也就是回到最近一次的add、commit -
删除文件
一般情况,直接在工作区删除或者用rm file
命令删除,版本库里还有- 把版本库里面的对应文件删除
git rm file
,然后git commit -m "remove file"
- 误删,
git checkout --file
命令撤销就行
- 把版本库里面的对应文件删除
回到顶部 目录
远程仓库
-
添加仓库
可以弄一个服务器自己搭建,这里介绍GitHub网站,提供Git仓库托管服务的
本地的Git仓库和GitHub仓库之间的传输需要提供SSH加密的
1. 创建SSH Key。在当前用户主目录下,查看是否存在**.ssh目录,里面是否有id_rsa和id_rsa.pub**,有跳过
没有使用命令ssh-keygen -t rsa -C "邮箱地址"
,然后一路回车
成功后你会生成.ssh目录,里面有**id_rsa(私钥,不能泄露)和id_rsa.pub(公钥)**两个文件
2. 登录GitHub,打开"Account settings",“SSH Keys"页面,然后点击"Add SSH Key”,填写title,在Key文本款中粘贴id_rsa.pub文件内容,然后点击"Add Key" -
添加远程库
- 登陆GitHub -> Create a new reopo -> Repository name(库的名字) —> Create repository
- 关联远程库:
git remote add origin git@github.com:Git账号名称\仓库名称.git
- 下载最新文件:
git pull origin master
(GitHub项目上和本地文件不相同) - 提交内容:
git push origin master
(第一个在push后加一个 -u,可以让本地仓库和远程仓库链接起来)
-
远程库的克隆
- 创建一个远程库(gitskills),勾选Initialize this repository with a README
- 克隆仓库命令:
git clone 克隆库的地址
回到顶部 目录
分布式管理
-
创建与合并分支
- 查看分支:
git branch
- 创建分支:
git branch <name>
- 切换分支:
git checkout <name>
或者git switch <name>
- 创建并切换分支:
git checkout -b <name>
或者git switch -c <name>
- 合并某分支到当前分支:
git merge <name>
- 删除分支:
git branch -d <name>
- 查看分支:
-
解决冲突
必须自己手解决,git log -graph
命令可以查看到分支图 -
分支管理策略
通常情况下,Git会使用Fast forward模式,该模式下,删除分支后,会丢掉分支信息
解决方法:在合并的时候加上–no-ff参数git merge --no-ff -m "提示信息" <name>
-
Bug分支
发现Bug,修复bug时,我们会通过创建新的bug分支进行修复然后合并,最后删除
1. 把当前工作现场保存一下git stash
,然后去修bug
2.git stash lisr
命令查看刚刚保存的工作现场
3. 恢复现场并删除stash:git stash pop
在主线程上的bug当前肯定也会有,就需要同步修复bug
git cherry-pick <commit>
命令,把bug提交的修改复制到当前分支,避免重复劳动
如果要丢弃一个没有被合并的分支,可以通过git branch -D <name>
强行删除 -
多人协作
- 查看远程库信息:
git remote -v
- 本地新建的分支如果不推送到远程,对其他人就是不可见的
- 从本地推送分支:
git push origin branch-name
,如果失败,先用git pull
抓取远程的新提交 - 在本地创建和远程分支对应的分支,使用
git checkout -b branch-name origin/branch-name
,本地和远程分支的名称最好一致 - 创建本地分支和远程分支的关联,使用
git branch--set-upstream branch-name origin/branch-name
- 从远程抓取分支,使用
git pull
,如果有冲突,要先处理冲突
- 查看远程库信息:
回到顶部 目录
标签管理
-
创建标签
- 新建一个标签
git tag <tagname>
,默认我HEAD,也可以指定一个commit id - 指定标签信息:
git tag -a <tagname> -m "sfsf"
- 查看使用的标签:
git tag
- 新建一个标签
-
操作标签
- 推送本地标签:
git push origin <tagname>
- 推送全部本地标签:
git push origin --tags
- 删除本地标签:
git push -d <tagname>
- 删除远程标签>:
git push origin :refs/tags/<tagname>
- 推送本地标签:
回到顶部 目录
GitHub和Gitee(码云)
两个都是相当优秀的Git托管网站上面已经基本操作了GitHub
两个操作基本相同,GitHub是国外的网站,Gitee是国内的网站
删除原有的远程关联:git remote rm origin
创建新的远程关联:git remote add origin
同时关联GitHub和Gitee(码云):git remote add github
和 git remote add gitee
要推送到GitHub和Gitee(码云):git push github master
和 git push gitee master
回到顶部 目录
自定义Git
- 设置显示背景颜色
git config --global color.ui true
- 配置别名:每个仓库是Git配置文件都在**.git/config**文件中的[alias]下面,而当前的配置文件在用户主目录的一个隐藏文件.gitconfig中
- 忽略特殊文件:在Git工作区的根目录下创建一个特殊的.gitignore文件,GitHub上有
推荐
git可视化软件:SourceTree
回到顶部 目录