从零开始认识git

来源:互联网 发布:网络电视遥控怎么开 编辑:程序博客网 时间:2024/06/06 20:08

前言:当下最火的版本控制工具非git莫属,相对于svn,git有天生的优势:分支管理git更加快速方便;分布式开发更加便捷,每个人的本地都有自己的版本库也都可以做为中央服务器。

安装git

本人使用windows,所以这里只讲windows下的git安装。msysgit是windows版本的git,只需下载exe文件,安装即可,下载链接请点击: https://pan.baidu.com/s/1hsinb1a 密码: 52pb。

安装完成后,在所有程序中找到Git Bash或者右键菜单中的Git Bash Here,弹出黑色命令行,输入git –version,显示当前安装的git版本号,那么恭喜你,git安装成功了。

$ git --versiongit version 2.8.1.windows.1

因为git是分布式版本控制系统,所以每台向远程提交代码的主机都要自报家门,设置自己的名称和邮件地址。

$ git config --global user.name "Your Name"Jacob@HJS-PC0LMP5J MINGW64 ~$ git config --global user.email "YourEmail@email.com"

git奉行没有提示就是最好的提示,所以Git Bash没有提示就代表操作正确了。
–global代表这台机器上的所有仓库都使用这个配置。

建立本地git仓库

在本地建立自己的git仓库,在D盘新建文件夹first_git.

$ mkdir first_git$ cd first_git/

进入first_git目录,执行git init命令,将此文件夹初始化为git仓库,命令执行成功后,first_git目录下会多出一个.git文件夹。

$ git initInitialized empty Git repository in D:/first_git/.git/$ ll -atotal 8drwxr-xr-x 1 Jacob 1049089 0 八月  5 22:43 ./drwxr-xr-x 1 Jacob 1049089 0 八月  5 22:39 ../drwxr-xr-x 1 Jacob 1049089 0 八月  5 22:43 .git/

.git目录中的内容不要随意修改,否则会破坏仓库结果,无法使用。

在first_git目录下新建一个名称为HelloGit.txt的文本文件,内容为Hello,Git!

Hello Git!

此时,HelloGit.txt虽然在first_git目录下,但并没有被仓库管理,只是在工作区中。
git status 命令可以查看当然仓库的文件状态。

$ git statusOn branch masterInitial commitUntracked files:  (use "git add <file>..." to include in what will be committed)        HelloGit.txtnothing added to commit but untracked files present (use "git add" to track)

查看git status的执行结果,因为git自动建立的分支名称为master(一般称为主分支),所以第二行显示On branch master。结果提示有一个未跟踪的文件HelloGit.txt。

第一步:通过git add HelloGit.txt 命令将HelloGit.txt添加到暂存区中。也可以使用git add -A命令,代表将目录中所有修改的文件都add到暂存区中。

$ git add -A$ git statusOn branch masterInitial commitChanges to be committed:  (use "git rm --cached <file>..." to unstage)        new file:   HelloGit.txt

git add后,再使用git status 查看,发现提示有一个HelloGit.txt文件修改记录等待commit。

第二步:通过git commit -m “注释”将HelloGit.txt提交到仓库中。

$ git commit -m "my first git"[master (root-commit) a26085a] my first git 1 file changed, 1 insertion(+) create mode 100644 HelloGit.txt$ git statusOn branch masternothing to commit, working directory clean

执行git commit命令后,使用git status查看,发现工作区已经干净了,nothing to commit, working directory clean。

下面通过一张图理解工作区、暂存区的概念区别。

这里写图片描述

  1. 第一步git add将修改的文件添加到暂存区。
  2. 第二步git commit将文件添加到本地仓库的本地分支。
  3. 第三部git push将文件推送到远程仓库分支。

本地仓库推送到远程仓库

我们将github做为远程仓库,首先注册github账号,这个大家自行注册吧。
新建远程仓库:
这里写图片描述

这里写图片描述

这里写图片描述
到这里,远程仓库建立好了!!

下面将本地仓库和远程仓库关联起来,并将本地文件推送到远程:

第一步:在github上增加本地对应的公钥,每台机器都可以生成唯一的公钥和私钥,公钥可以公开,私钥自己保存好,github通过这个公钥来判别是哪个用户提交的,进行身份验证。
生成ssh key:

$ ssh-keygen -t rsa -C "youremail@example.com"

执行命令后,可以在用户主目录中找到.ssh的目录,里面有id_rsa和id_rsa.pub两个文件。使用文本编辑器打开id_rsa.pub文件,拷贝里面的全部文本,在github上增加这个ssh key。
这里写图片描述

点击Add SSH key后完成,这样github就知道你的身份了,可以合法的clone和push代码了。

第二步:git remote add 将本地仓库和远程仓库关联起来。注意后面的https链接是自己刚刚建立的仓库的地址,记得替换为自己的。

$ git remote add origin https://github.com/FlySalmon/first_git.git

第三步:git push将本地的master分支推送到远程仓库的master分支。因为远程仓库是空的,-u参数将本地分支推送到远程的同时建立本地分支和远程分支的关联关系,这样可以简化以后的操作。

$ git push -u origin masterUsername for 'https://github.com': FlySalmonCounting objects: 3, done.Writing objects: 100% (3/3), 226 bytes | 0 bytes/s, done.Total 3 (delta 0), reused 0 (delta 0)To https://github.com/FlySalmon/first_git.git * [new branch]      master -> masterBranch master set up to track remote branch master from origin.

第四步:git remote -v可以查看当前关联的远程仓库,这里有fetch和push,说明从远程仓库更新和向远程仓库推送的权限都有。

$ git remote -vorigin  https://github.com/FlySalmon/first_git.git (fetch)origin  https://github.com/FlySalmon/first_git.git (push)

从远程仓库克隆分支到本地

上面讲的是远程仓库为空, 我们将本地仓库推送到远程。在实际工作中,更多的是远程仓库已经有代码分支,我们需要clone到本地进行开发。
比如我的github上有地址https://github.com/FlySalmon/spec.git的分支,现在需要clone下来。

进入Git Bash命令行,cd到自己的工作目录,执行git clone命令:

$ git clone https://github.com/FlySalmon/spec.gitCloning into 'spec'...remote: Counting objects: 382, done.rRemote: Total 382 (delta 0), reused 0 (delta 0), pack-reused 382eceiving object                                 , 548.00 KiB | 168.00 KiB/sReceiving objects: 100% (382/382), 621.99 KiB | 168.00 KiB/s, done.Resolving deltas: 100% (209/209), done.Checking connectivity... done.

这样就clone完成了,本地就下载了项目代码。
更多的关于分支和clone的知识可以参阅另一篇博客http://blog.csdn.net/xin1990/article/details/73776555

提交本地仓库修改到远程仓库

在本地开发结束,提交代码到远程仓库,也是三步走,修改HelloGit.txt中的内容,增加一行Hello World!

$ cat HelloGit.txtHello GitHello World

第一步:git add将修改的文件提交到暂存区。

$ git add -A

第二步:git commit 将add的文件提交到本地仓库。

$ git commit -m "add Hello World!"[master ee9fee0] add Hello World! 1 file changed, 2 insertions(+), 1 deletion(-)

第三步:git push将本地仓库的修改文件推送到远程仓库。

$ git push <远程主机名> <本地分支名>:<远程分支名>
$ git push origin master:masterUsername for 'https://github.com': FlySalmonCounting objects: 3, done.Writing objects: 100% (3/3), 271 bytes | 0 bytes/s, done.Total 3 (delta 0), reused 0 (delta 0)To https://github.com/FlySalmon/first_git.git   a26085a..ee9fee0  master -> master

origin代表远程主机名,同时如果本地分支只有一个远程追踪分支,还可以有一下2种简写:

$ git push origin master
$ git push

如果省略本地分支名,是将空的分支推送到远程,其实就是删除远程分支

$ git push origin :master# 等同于$ git push origin --delete master

可以在github查看这个修改的文件已经是修改后的内容了
这里写图片描述

从远程仓库更新到本地仓库

在实际开发过程中,我们需要经常更新别人推送的代码,现在介绍下使用命令从远程分支更新代码到本地分支的方法,这里使用公司实际的分支做介绍,若使用GUI工具,如TortoiseGit、SourceTree等就更加方便。

四步走:
第一步:$ git fetch origin release_2.5_20170823:temp
这个命令的意思:从远程origin仓库下载分支release_2.5_20170823到本地并新建temp分支。

第二步:比较本地分支和temp分支的不同。

$ git diff temp

若有更新,则会显示出差异。

第三步:合并merge代码。若本地分支和temp分支有冲突则需要先解决冲突才能merge。

$ git merge tempUpdating 239a321..d6a3b6bFast-forward .../trans/impl/FundServiceImpl.java       | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-)

因为没有冲突,所以使用Fast-forward快速合并模式合并代码了。

第四步:合并完成,删除temp分支。

$ git branch -d tempDeleted branch temp (was d6a3b6b).

如果temp分支没有合并到master分支,则会报错,可以使用git branch -D temp命令强制删除。

注:git pull命令也可以更新远程代码,相当于git fetch + git merge,git pull方式在多人协同开发时并不安全,建议使用上面的方式操作。

原创粉丝点击