首先下载git,下载链接如下:
https://git-scm.com/downloads
然后双击安装包进行安装,安装过程一路next即可
然后打开github首页,链接如下:
https://github.com/
点击sign up
填写相关信息
至此,完成git的安装与github的注册
安装完git后第一次使用时,需要确认用户名和邮箱
按下键盘上的Windows,然后输入git,即可打开git
输入指令如下:
git config --global user.name "注册github时你用的名字" // 确认用户名
git config --global user.email "注册github时你用的邮箱" // 确认邮箱
新建了一个目录(文件夹),该目录就作为我们的工作目录
进入这个目录
在当前的工作目录下,右键并选择git Bash Here
出现以下的git的命令行交互界面
接下来输入指令:
git init
此时当前工作目录下多出了一个以 “.” 开头的隐藏文件,这就是刚刚新建好的本地仓库
我们新建一个文本文件:Hello.txt
里面写上一些内容,然后进行保存
此时还是打开git Bash,输入:
git status // 查看状态
这是说明我们这个文件已经做了修改,但是这个文件还没保存到本地仓库里面。
接下来执行:
git add Hello.txt
这个操作是将Hello.txt文件添加到暂存区中
如果要将当前目录下的所有文件都添加到暂存区中,可以使用如下指令:
git add . // 此处的 . 表示所有文件
再次查看状态:
如图所示,此时的Hello.txt已经变成了绿色,说明这个文件已经到了暂存区里面
概念解析:
首先你得明白这几个概念,工作区就是你现在编辑器所处的那个工程里面,在这个指的就是test这个文件夹
刚才你写了一个Hello.txt。写完之后就是往工作区增添了一个文件,然后你用git status查看状态发现,Hello.txt是红色的
git status就是查看你工作区和暂存区有没有文件没被提交到本地仓库
如果有工作目录区保存了,暂存区没有保存的就显示红色,如果有暂存区没提交到本地仓库的就是绿色
那么如何把文件从暂存区提交到本地仓库呢,就是使用以下指令:
git commit -m "注释"
执行完成后的结果如下:
git commit –m “注释” 这个引号里面的内容是随意的,就是自己添加一个备注,比如自己改动了什么东西,为什么要改之类的
对Hello.txt进行修改并保存:
再次查看状态:
Hello.txt是红色的,这说明存在有未向暂存区提交的保存
此时再来一遍 git add 和 git commit 即可
到目前为止,我们已经向工作区提交了两次修改
可以使用以下指令,可以查看我们最近的提交历史:
git log
如图所示,可以看出来我们提交(commit)了两次,前面那串黄色的字符串就是每次提交的版本号
此时,若我们要回退到第一次修改时,则可以执行以下指令:
git reset --hard 27c4cecb9
这句指令后面的参数“27c4cecb9”,其实是从这里复制过来的
此时再次打开Hello.txt
显然,版本已经回到第一次添加的内容了
假设想再次回退到第二次添加的内容
先查看一下状态:
此时我们需要用到如下指令:
git reflog
显然,这里再次出现了第二次commit的版本号,我们尝试滚回第二次commit
git reset --hard ced05e0
我们把文件删除了
查看状态
存到缓存区
查看状态
提交到本地仓库
查看日志
在Windows下打开git客户端
输入如下指令,生成你正在使用的这个电脑的公钥(public key)
ssh-keygen
然后打开github:
https://github.com/
因为你已经注册过了,所以这次点击这里:
输入注册时的邮箱和密码
登录进去后,点击右上角头像,选择setting
然后选择SSH and GPG keys
点击新建SSH key
接下来建立远程仓库
git remote add origin 刚刚复制的内容
这个远程仓库的名字就是origin
这是Git默认的叫法,也可以改成别的,但是origin这个名字一看就知道是远程仓库
然后我们要将本地仓库的东西同步到远程仓库去,在这之前,我们先要执行如下指令:
git pull --rebase origin master
这条指令的意思是,把远程库中的更新合并到本地库中,因为你在新建远程仓库的时候新加了readme,这是本地仓库没有的
–rebase的作用是取消掉本地库中刚刚的commit,并把他们接到更新后的版本库之中
git pull –rebase origin master意为先取消commit记录,并且把它们临时保存为补丁(patch)(这些补丁放到”.git/rebase”目录中),之后同步远程库到本地,最后合并补丁到本地库之中
接下来执行如下指令,将本地仓库中的东西同步到远程仓库去
git push origin master
分支在实际中有什么用呢?假设你准备开发一个新功能,但是需要两周才能完成,第一周你写了50%的代码,如果立刻提交,由于代码还没写完,不完整的代码库会导致别人不能干活了。如果等代码全部写完再一次提交,又存在丢失每天进度的巨大风险。
现在有了分支,就不用怕了。你创建了一个属于你自己的分支,别人看不到,还继续在原来的分支上正常工作,而你在自己的分支上干活,想提交就提交,直到开发完毕后,再一次性合并到原来的分支上,这样,既安全,又不影响别人工作。
最开始的时候我们的所有操作都是默认在一个叫做master的分支上操作的,包括提交到远程库,等等。关联远程库的时候也是从远程关联master分支。当我们用dev这个分支写完一个项目之后,我们要把这个分支所做的工作向master分支进行靠拢.
首先创建分支dev,指令如下:
git checkout -b dev
可以使用以下指令查看所有分支:
git branch
我们在dev分支下对Hello.txt进行修改
然后将其添加到本地仓库
现在我dev的分支工作已经做完,现在我可以切换回master分支
git checkout master
此时的Hello.txt
切换回master分支之后,我们发现Hello.txt里面新加的语句不在了
因为我们刚才是在dev分支上做的提交
现在我们要把分支合到master上,就利用以下指令就可以了:
git merge dev
此时再去查看Hello.txt发现我们在dev里面做的操作已经在master里面了。
现在我们可以使用命令git branch –d dev来删除dev这个分支,之后再使用git branch来查看分支发现只有master一个分支了。
因为创建、合并和删除分支非常快,所以Git鼓励我们使用分支完成某个任务,合并后再删掉分支,这和直接在master分支上工作效果是一样的,但过程更安全。
git push的一般形式为:
git push <远程主机名> <本地分支名> <远程分支名>
看一个例子
显然这里省略了远程分支名(或者你也可以理解为省略了本地分支名)
这说明远程分支名和本地分支名是一样的,都是master
如果是这样的:
git push origin :refs/for/master // refs/for 的意义在于我们提交代码到服务器之后是需要经过code review 之后才能进行merge的,而refs/heads 不需要
若省略本地分支,则相当于推送一个空的本地分支到远程分支,等同于删除指定的远程分支
与以下指令是等价的:
git push origin --delete master
若本地分支和远程分支都省略掉了,就像这样写:
git push origin
如果当前分支与远程分支存在追踪关系,则本地分支和远程分支都可以省略,将当前分支推送到origin主机的对应分支
如果当前分支只有一个远程分支,那么主机名都可以省略,直接使用指令如下:
git push
可以使用以下指令查看远程分支名:
git branch -r
从远程分支 checkout 出来的本地分支,称为 跟踪分支 (tracking branch)。跟踪分支是一种和某个远程分支有直接联系的本地分支
在跟踪分支里输入 git push,Git 会自行推断应该向哪个服务器的哪个分支推送数据。同样,在这些分支里运行 git pull 会获取所有远程索引,并把它们的数据都合并到本地分支中来
在我们克隆仓库时,Git 通常会自动创建一个名为 master 的分支来跟踪 origin/master。这正是 git push 和 git pull 一开始就能正常工作的原因
当然,我们也可以随心所欲地设定为其它跟踪分支,比如 origin 上除了 master之外的其它分支
刚才我们已经看到了这样的一个例子:git checkout -b <远程主机名> <本地分支名> <远程分支名>