官网下载地址:https://git-scm.com/downloads
在Windows上使用Git,可以从Git官网直接下载安装程序,然后按默认选项安装即可。
傻瓜式安装,一路下一步
安装完成后,在开始菜单里找到“Git”->“Git Bash”,蹦出一个类似命令行窗口的东西,就说明Git安装成功!
安装完成后,还需要最后一步设置,在命令行输入:
$ git config --global user.name "zhongyk"
$ git config --global user.email "[email protected]"
因为Git是分布式版本控制系统,所以,每个机器都必须自报家门:你的名字和Email地址。你也许会担心,如果有人故意冒充别人怎么办?这个不必担心,首先我们相信大家都是善良无知的群众,其次,真的有冒充的也是有办法可查的。
注意:git config
命令的--global
参数,用了这个参数,表示你这台机器上所有的Git仓库都会使用这个配置,当然也可以对某个仓库指定不同的用户名和Email地址。
什么是版本库呢?版本库又名仓库,英文名repository,你可以简单理解成一个目录,这个目录里面的所有文件都可以被Git管理起来,每个文件的修改、删除,Git都能跟踪,以便任何时刻都可以追踪历史,或者在将来某个时刻可以“还原”。
所以,创建一个版本库非常简单,首先,选择一个合适的地方,创建一个空目录:
$ mkdir 192-Repository #创建一个空的目录
第二步,通过git init
命令把这个目录变成Git可以管理的仓库:
$ git init
瞬间Git就把仓库建好了,而且告诉你是一个空的仓库(empty Git repository),细心的读者可以发现当前目录下多了一个.git
的目录,这个目录是Git来跟踪管理版本库的,没事千万不要手动修改这个目录里面的文件,不然改乱了,就把Git仓库给破坏了。
如果你没有看到.git
目录,那是因为这个目录默认是隐藏的,用ls -ah
命令就可以看见。
$ touch aaa.txt
和把大象放到冰箱需要3步相比,把一个文件放到Git仓库只需要两步。
第一步,用命令git add
告诉Git,把文件添加到仓库(暂存区):
$ git add <file> #file 文件名 aaa.txt
执行上面的命令,没有任何显示,这就对了,Unix的哲学是“没有消息就是好消息”,说明添加成功。
第二步,用命令git commit
告诉Git,把文件提交到仓库:
$ git commit -m "提交描述信息" #-m 相当于message 提交的说明
简单解释一下git commit
命令,-m
后面输入的是本次提交的说明,可以输入任意内容,当然最好是有意义的,这样你就能从历史记录里方便地找到改动记录。
嫌麻烦不想输入-m "xxx"
行不行?确实有办法可以这么干,但是强烈不建议你这么干,因为输入说明对自己对别人阅读都很重要。实在不想输入说明的童鞋请自行Google,我不告诉你这个参数。
git commit
命令执行成功后会告诉你,1 file changed
:1个文件被改动(我们新添加的aaa.txt文件);
$ git status
工作区有一个隐藏目录.git
,这个不算工作区,而是Git的版本库。
当然了,在实际工作中,我们脑子里怎么可能记得一个几千行的文件每次都改了什么内容,不然要版本控制系统干什么。版本控制系统肯定有某个命令可以告诉我们历史记录,在Git中,我们用git log
命令查看:
$ git log
$ git log --pretty=onelie
像这样,你不断对文件进行修改,然后不断提交修改到版本库里,就好比玩RPG游戏时,每通过一关就会自动把游戏状态存盘,如果某一关没过去,你还可以选择读取前一关的状态。有些时候,在打Boss之前,你会手动存盘,以便万一打Boss失败了,可以从最近的地方重新开始。Git也是一样,每当你觉得文件修改到一定程度的时候,就可以“保存一个快照”,这个快照在Git中被称为commit
。一旦你把文件改乱了,或者误删了文件,还可以从最近的一个commit
恢复,然后继续工作,而不是把几个月的工作成果全部丢失。
首先,Git必须知道当前版本是哪个版本,在Git中,用HEAD
表示当前版本,也就是最新的提交1094adb...
(注意我的提交ID和你的肯定不一样),上一个版本就是HEAD^
,上上一个版本就是HEAD^^
,当然往上100个版本写100个^
比较容易数不过来,所以写成HEAD~100
。
现在,我们要把当前版本,回退到上一个版本,就可以使用git reset
命令:
$ git reset --hard HEAD^ #回退到上一个版本
$ git reset --hard HEAD^(1~100) #会退到上n个版本
$ git reset --hard d273 #d273 指定提交版本的版本号:commitId
最新的那个版本append GPL
已经看不到了!好比你从21世纪坐时光穿梭机来到了19世纪,想再回去已经回不去了,肿么办?
办法其实还是有的,只要上面的命令行窗口还没有被关掉,你就可以顺着往上找啊找啊,找到那个append GPL
的commit id
是1094adb...
,于是就可以指定回到未来的某个版本:
现在,你回退到了某个版本,关掉了电脑,第二天早上就后悔了,想恢复到新版本怎么办?找不到新版本的commit id
怎么办?
在Git中,总是有后悔药可以吃的。当你用$ git reset --hard HEAD^
回退到add distributed
版本时,再想恢复到append GPL
,就必须找到append GPL
的commit id。Git提供了一个命令git reflog
用来记录你的每一次命令:
$ git reflog
$ git restore <file> #:文件名 2.24.0版本之后使用
$ git checkout -- <file>
#第一步:撤销暂存区的修改到工作区
$ git restore --staged <file> #:文件名 2.24.0版本之后使用
$ git reset HEAD <file>
#第二步:撤销工作区的修改
$ git restore <file>
在Git中,删除也是一个修改操作
删除文件可以直接删除
$ rm <fiel> #删除文件
#第一步:确定删除
$ git add/rm <file> #相当于 提交修改|确定删除
#第二步:提交操作
$ git commit -m "提交说明"
$ git restore <file> #撤销工作区的修改
仓库名字随便写:全局唯一
$ git clone [email protected]:15236674712/2001-yingx.git
克隆失败
克隆为“ 192-yingx” …
[email protected]:权限被拒绝(公钥)。
致命:无法从远程存储库读取。
请确保您具有正确的访问权限,并且存储库存在。
第1步:创建SSH Key。在用户主目录下,看看有没有.ssh目录,如果有,再看看这个目录下有没有id_rsa
和id_rsa.pub
这两个文件,如果已经有了,可直接跳到下一步。如果没有,打开Shell(Windows下打开Git Bash),创建SSH Key:
$ ssh-keygen -t rsa -C "[email protected]"
#如果电脑中没有.ssh目录 执行以下命令
$ ssh-keygen
你需要把邮件地址换成你自己的邮件地址,然后一路回车,使用默认值即可,由于这个Key也不是用于军事目的,所以也无需设置密码。
如果一切顺利的话,可以在用户主目录里找到.ssh
目录,里面有id_rsa
和id_rsa.pub
两个文件,这两个就是SSH Key的秘钥对,id_rsa
是私钥,不能泄露出去,id_rsa.pub
是公钥,可以放心地告诉任何人。
查看公私钥
C:\Users\NANAN\.ssh
1.公钥
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDzlZeWMt9WVrCqC86Z9Ssvgk7xzHrKGgnuryUSC4Ryt2vZ/jrq5hZQ4M/54f5V1HZxz7ehVHyAG6PonpptthoRVAHQdXdms7z81EXeq0MKtJDWOS2UgJmD7cSkNSB/FLGH+HkYv6BdkS6QlntkEu1aXEk8/QwM0sosoz9TswNi1zWUjFpywUk8AoNIY9Og/KKhgM/TQR8NvpKCfIZgNkEK7AdPhc/V8pGri14W7dfotI0ZSrs9BHTXd6bQEQAqQqVxjRx6h1vLqkEnSZ82CTbFuI2j/3dLofqxcXwb7t5ag1MPAgq871xJo8CGP2JlJr7D6UG1rjILsTt2DUuG11dHfi7MchSCsLs4jUQsmIqH5uv+roESOuOABsO//Hm+BntWKczPjAV8JXCM9idKHD7NrZvdAI6sPr8WUnm1I368pbANzb9BDHq3h1Vpa+yjjlJKXFxd3Nvz9xC+4usGV4yGGqb8DVXnmuBUcHuJnPZ3vkX/Q3DuBUJqBgLrKjU4VZE= [email protected]
2.私钥
-----BEGIN OPENSSH PRIVATE KEY-----
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
-----END OPENSSH PRIVATE KEY-----
6.6.配置GitHub信任列表
第2步:登陆GitHub,点击头像,选择“Settings”,打开“SSH and GPG keys”页面:
然后,点“New ssh Key”,填上任意Title,在Key文本框里粘贴id_rsa.pub
文件的内容:
$ git clone [email protected]:15236674712/192-yingx.git
克隆成功
$ git push -u origin master #第一次推送修改
$ git push origin master
添加后,远程库的名字就是origin
,这是Git默认的叫法,也可以改成别的,但是origin
这个名字一看就知道是远程库。
下一步,就可以把本地库的所有内容推送到远程库上:
把本地库的内容推送到远程,用git push
命令,实际上是把当前分支master
推送到远程。
由于远程库是空的,我们第一次推送master
分支时,加上了-u
参数,Git不但会把本地的master
分支内容推送的远程新的master
分支,还会把本地的master
分支和远程的master
分支关联起来,在以后的推送或者拉取时就可以简化命令。
$ git pull origin master
目录名与项目名一致
$ git init
$ git add .
$ git commit -m "first commit"
$ git remote add origin [email protected]:15236674712/github-192.git #与远程Github(同名的空目录)建立连接
$ git push -u origin master #将本地仓库(项目)推送至远程Github
分支在实际中有什么用呢?假设你准备开发一个新功能,但是需要两周才能完成,第一周你写了50%的代码,如果立刻提交,由于代码还没写完,不完整的代码库会导致别人不能干活了。如果等代码全部写完再一次提交,又存在丢失每天进度的巨大风险。
现在有了分支,就不用怕了。你创建了一个属于你自己的分支,别人看不到,还继续在原来的分支上正常工作,而你在自己的分支上干活,想提交就提交,直到开发完毕后,再一次性合并到原来的分支上,这样,既安全,又不影响别人工作。
其他版本控制系统如SVN等都有分支管理,但是用过之后你会发现,这些版本控制系统创建和切换分支比蜗牛还慢,简直让人无法忍受,结果分支功能成了摆设,大家都不去用。
但Git的分支是与众不同的,无论创建、切换和删除分支,Git在1秒钟之内就能完成!无论你的版本库是1个文件还是1万个文件。
$ git branch dev #dev分支名
$ git checkout dev #dev分支名
$ git checkout -b dev #dev分支名
$ git branch
$ git merge dev
#注意:如果要将dev分支合并到master分支,切换到master分支执行合并
$ git branch -d dev #-d 删除(delete) dev分支名
在实际开发中,我们应该按照几个基本原则进行分支管理:
首先,master
分支应该是非常稳定的,也就是仅用来发布新版本,平时不能在上面干活;
那在哪干活呢?干活都在dev
分支上,也就是说,dev
分支是不稳定的,到某个时候,比如1.0版本发布时,再把dev
分支合并到master
上,在master
分支发布1.0版本;
你和你的小伙伴们每个人都在dev
分支上干活,每个人都有自己的分支,时不时地往dev
分支上合并就可以了。
所以,团队合作的分支看起来就像这样:
修改控制台shell路径:setting -> Tools -> Terminal -> Shell path,修改为git安装路径。
我们配置idea 的终端为git 的bash.cmd 之后会出现中文乱码
解决方法:
1.git的安装路径下etc文件下有个 bash.bashrc 文件,在这个文件末尾追加:
export LANG="zh_CN.UTF-8"
export LC_ALL="zh_CN.UTF-8"
2.中文乱码问题
-Dfile.encoding=UTF-8
export LANG=“zh_CN.UTF-8”
export LC_ALL=“zh_CN.UTF-8”
选择要初始化仓库的项目
加入提示信息
展示历史提交版本
8.10.1选择回退版本直接回退
8.10.2根据版本提交id(commitId)回退
选择切换版本
输入要切换的版本编号
查看/添加分支
分支操作
合并分支
填写要分享的项目名
分享成功
Commit and Push
push
推送成功
使用Git克隆项目
创建本地文件夹,克隆项目
是否打开项目
使用哪种方式打开项目
push时遇到冲突
当前分支主管的推送被拒绝
推送前需要合并远程更改
当push时遇到冲突,要先pull 再push
判断代码有没有交集,idea自动判断
1.代码无交集
直接pull成功
2.代码有交集
当两个开发者同时操作到一个文件时会出现冲突
当两个开发者遇到冲突代码有交集时:两个人协商解决,解决之后将代码再推送至Github,另一个人再同步修改
pull遇到冲突
解决冲突案例