概念
1、 什么是Git:
Git是一个开源的分布式版本控制系统,可以有效、高速地处理从很小到非常大的项目版本管理,是用来保存工程源代码历史状态的命令行工具。
2、Git与Github:
Git是版本控制系统,Github是在线的基于Git的代码托管服务。
3、分布式:
在分布式版本控制系统里,客户端并不只提取最新版本的文件快照,而是把代码仓库完整地镜像下来。这么一来,任何一处协同工作用的服务器发生故障,事后都可以用任何一个镜像出来的本地仓库恢复。因为每一次的提取操作,实际上都是一次对代码仓库的完整备份。
下载安装
1、下载
官网:https://git-scm.com/ 直接百度
2、安装
Windows 上安装,可默认配置直接next安装完成,其他可参考 Git安装
3、配置
安装好之后,
右键选择Git Bash Here,会打开一个终端
在命令行输入
$ git config --global user.name "username"
$ git config --global user.email "myname@email.com"
$ git config --list
设置用户名和密码并查看是否设置成功
4、问题:
Git用户名邮箱有什么作用,和github账号有什么关系?
Git本地库推送到远端(github)时会匹配邮箱,如果一致会认定这次这个push是账户拥有者自己做的,跟直接登
录到GitHub,从网站上修改,是相同的,修改人是一样,就是账户拥有者。参考Git账户与GIthub账号关系
初步使用
初始化
在Git Bash Here命令行终端进入自定义的工作目录(保存代码的地方),或是直接在工作目录中打开命令行,输入
$git init
即可初始化一个本地GIt库,这时候你当前工作目录下会多了一个.git的目录,这个目录是Git来跟踪管理版本的,没事千万不要手动乱改这个目录里面的文件,否则,会把git仓库给破坏了。
该目录是隐藏目录,win10下可以在文档界面的功能区的查看下勾选隐藏项目,如下:
win7在文档界面的组织的文件及文件夹选项中(大概0.0)
上行更新
大致示意如下:
1、初始化一个版本库
2、新建\修改一个文件
3、将文件添加到暂存区
4、提交到本地库,后面备注为提交说明
git init
git add 1.c
git commit -m "新增1.c"
5、推送到远端版本库
第一次向远端(此使用远端为github)推送内容时步骤如下:
a、需要一个GitHub账号
Github官网
b、由于你的本地Git仓库和github仓库之间的传输是通过SSH加密的,所以需要设置密钥。cmd命令行中输入
ssh-keygen -t rsa –C “youremail@example.com”
三次回车后会在用户目录 .ssh目录下生成了私钥和公钥,也可填入文件名密码在用户目录当前目录生成,其中.pub后缀为公钥
将公钥添加到github中 在settings菜单下ssh中,点击new ssh 按键后如下
将公钥内容复制到key栏中,填入一个title名后,Add SSH key完成添加。
c、在github上创建一个仓库用于接收本地库推送
点击右上角+号选择new repository创建一个仓库
d、关联本地和远端仓库
e、推送到远端仓库
$ git push -u origin master
把本地库的内容推送到远程,使用 git push命令,实际上是把当前分支master推送到远程。
由于远程库是空的,我们第一次推送master分支时,加上了 –u参数,Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令。
完成
我这次操作弹出了登入窗口,需要输入账号密码才完成推送。
更改和远端的链接方式
(还没试>_<)
下行更新
将在Github或是其他平台的仓库,同步到本地。
换一个工作目录将刚刚更新的远端仓库克隆下来
$ git clone https://github.com/shazip/we
版本控制
1、版本回退
修改提交的版本
经过两次修改后出现了3个版本状态
1.c当前内容如下
输入
git reset --hard HEAD^
退回到上一版本。
那么如果要回退到上上个版本只需把HEAD^ 改成 HEAD^^ 以此类推。那如果要回退到前100个版本的话,使用上面的方法肯定不方便,我们可以使用下面的简便命令操作:git reset --hard HEAD~100 即可。
此时1.c内容
但是现在我想回退到最新的版本,222222内容要如何恢复呢?我们可以通过版本号回退,使用命令方法如下:
git reset --hard 版本号 ,可以通过git reflog命令获取到版本号
退回操作如下
此时1.c内容
2、版本检出
检出当前暂存的版本
此时将1.c修改增加“333333”但并未使用git add命令暂存
使用git checkout – 1.c后1.c中内容“333333”没有了
3、创建分支
使用git branch test 创建一个名为test的分支
使用git checkout test检出test新分支内容到工作区,当前分支切换为新分支
也可使用git checkout –b test直接创建并切换到新分支
4、合并分支
将目标分支合并到当前分支上,在切换到master分支后,使用git merge text命令可将text分支合并到master分支
先在text分支下修改内容并提交
再切换到master分支
使用git merge test命令可将text分支合并到master分支
!合并冲突
当出现合并时当前分支和目标分支有相斥的内容,使用合并命令时会出现冲突,需要修改内容并提交后在合并
在两个分支内修改不一致内容,修改后必须提交后才能切换分支
此时在master上合并test分支时会提示冲突
查看1.c内容可以发现冲突内容都被标记出来存在文件中
再直接选择修改内容到自己想要的结果后提交
还可以使用rebase指令进行合并 参考
其他
git help指令查询git指令
Git基本常用命令如下:
指令 | 说明 |
---|---|
git init | 把当前的目录变成可以管理的git仓库,生成隐藏.git文件。 |
git add XX | 把xx文件添加到暂存区去。 |
git commit –m “XX” | 提交文件 –m 后面的是注释。 |
git status | 查看仓库状态 |
git diff XX | 查看XX文件修改了那些内容 |
git log | 查看历史记录 |
git reset --hard HEAD^或者 git reset --hard HEAD~ | 回退到上一个版本(如果想回退到100个版本,使用git reset –hard HEAD~100 ) |
git reflog | 查看历史记录的版本号id |
git checkout – XX | 把XX文件在工作区的修改全部撤销。 |
git rm XX | 删除XX文件 |
git remote add origin 远程仓库地址 | 关联一个远程库 |
git push –u origin master | 把当前master分支推送到远程库(第一次要用-u 以后不需要) |
git clone 远程仓库地址 | 从远程库中克隆 |
git checkout –b test | 创建dev分支 并切换到test分支上 |
git branch | 查看当前所有的分支 |
git checkout master | 切换回master分支 |
git merge dev | 在当前的分支上合并dev分支 |
git branch –d dev | 删除dev分支 |
git branch XX | 创建XX分支 |
git stash | 把当前的工作隐藏起来 等以后恢复现场后继续工作 |
git stash list | 查看所有被隐藏的文件列表 |
git stash apply | 恢复被隐藏的文件,但是内容不删除 |
git stash drop | 删除文件 |
git stash pop | 恢复文件的同时 也删除文件 |
git remote | 查看远程库的信息 |
git remote –v | 查看远程库的详细信息 |
git push origin master | Git会把master分支推送到远程库对应的远程分支上 |
使用图形化版本控制软件
可以使用Sourcetree软件进行版本控制
安装时需要注册账号,可以使用Sourcetree跳过登陆跳过登陆步骤,我当前测试版本为3.1.3版本完成安装,早期版本只需添加accounts.json文件即可。
1、打开安装文件,提示需要登陆账号
2、文件地址栏直接输入 %LocalAppData%\Atlassian目录,接着进入SourceTree目录,创建accounts.json文件,并修改accounts.json内容如下:
[
{
"$id": "1",
"$type": "SourceTree.Api.Host.Identity.Model.IdentityAccount, SourceTree.Api.Host.Identity",
"Authenticate": true,
"HostInstance": {
"$id": "2",
"$type": "SourceTree.Host.Atlassianaccount.AtlassianAccountInstance, SourceTree.Host.AtlassianAccount",
"Host": {
"$id": "3",
"$type": "SourceTree.Host.Atlassianaccount.AtlassianAccountHost, SourceTree.Host.AtlassianAccount",
"Id": "atlassian account"
},
"BaseUrl": "https://id.atlassian.com/"
},
"Credentials": {
"$id": "4",
"$type": "SourceTree.Model.BasicAuthCredentials, SourceTree.Api.Account",
"Username": "",
"Email": null
},
"IsDefault": false
}
]
3文件地址栏直接输入%LocalAppData%\Atlassian,进入“SourceTree.exe_Url_iayhtc13zv3obzuz5vchezjs1az2q5ef”(注该目录可能和版本相关,不同版本的路径可能不完全一样。)
接着进入"3.1.3.3158"目录,打开user.config文件,在
“<SourceTree.Properties.Settings>”
后面加入以下代码。
<setting name="AgreedToEULA" serializeAs="String">
<value>True</value>
</setting>
<setting name="AgreedToEULAVersion" serializeAs="String">
<value>20160201</value>
</setting>
安装完成后就可以使用Sourcetree管理版本库了
使用参考Sourcetree使用版本控制原则与命令行操作一致。