[学习记录]Git教程

Git简介

Git(读音为/gɪt/。)是一个开源的分布式版本控制系统,可以有效、高速地处理从很小到非常大的项目版本管理。 [1] Git 是 [Linus Torvalds](https://baike.baidu.com/item/Linus Torvalds/9336769) 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。

以上来自于百度百科

看了一个大佬的介绍,总结下来:

当你和同事同时做一个文档的时候,Git不但能自动帮我记录每次文件的改动,还可以让同事协作编辑,这样就不用自己管理一堆类似的文件了,也不需要把文件传来传去。如果想查看某次改动,只需要在软件里瞄一眼就可以。

安装Git

在Windows上安装Git,可以从Git官网下载,一路默认下去就好了,安装完成后按键盘的win+R,输入cmd,弹出命令符见面再输入git,出现如下命令则安装成功:
在这里插入图片描述
之后在命令行输入:

$ git config --global user.name "Your Name"
$ git config --global user.email "email@example.com"

这里user.name和user.email可自定义,到这里就安装完成了。

创建版本库

什么是版本库?版本库又名仓库,英文repository(/rɪˈpɑːzətɔːri/)。可以简单的理解成一个目录。

开始创建版本库。

1.创建一个空文件夹jar,进入jar文件夹(注意:座位了避免出现问题,文件夹及路径不包含中文)

2.鼠标右键,单击Git Bash here,出现如下界面:
在这里插入图片描述
输入命令初始化仓库:

git init

这个时候jar文件夹就是一个仓库了,并且文件夹下面会多出一个.git文件夹

跟踪新文件

首先创建一个文本文件readme.txt。内容如下

This is a text file.

一定要在jar这个文件夹目录下,否则会找不到。然后开始放入git仓库

第一步,把文件添加到仓库:

git add readme.txt

执行完上面命令后没有任何显示就说明添加成功,否则百度去吧。我也不知道。

第二部,提交文件

git commit -m 'add text file'

-m后面是本次提交的说明,可以输入任何内容,这样就可以从历史记录中查看

执行完命令后会告诉你,1 file changed 一个文件被改动;1 insertions:插入了一行内容

为什么Git添加文件需要addcommit一共两步呢?因为commit可以一次提交很多文件,所以你可以多次add不同的文件,比如:

$ git add file1.txt
$ git add file2.txt file3.txt
$ git commit -m "add 3 files."

跟踪改目录下所有文件可以使用:

git add .

查看状态

如果你修改了文件,但是你忘了你修改的是什么东西了。这个时候可以使用这个语句查看修改状态。

git status
On branch master
nothing to commit, working directory clean

如果显示的是上面的语句,那么说明工作目录非常干净,没有被修改过。

如果像这样:
在这里插入图片描述
说明git之前的提交中没有这样的文件,就要使用git add <file>来跟踪文件

查看历史提交

默认不是用任何参数的话,git log会按提交时间列出所有的更新

git log

git log 有许多选项可以帮助你搜寻你所要找的提交, 接下来我们介绍些最常用的。

个常用的选项是 -p,用来显示每次提交的内容差异。 你也可以加上 -2 来仅显示最近两次提交:

git log -p
git log -2
git log --stat

--stat选项查看每次提交的简略统计信息

最有意思的还是format,可以定制要显示的记录格式。当你记录变了时,只要你指定了及时,输出的内容就不会随着Git的更新而改变:

$ git log --pretty=format:"%h - %an, %ar : %s"
9d8d940 - 1419908068, 30 minutes ago : 1
8fc3932 - 1419908068, 4 days ago : 博客源文件
d347c60 - 1419908068, 2 weeks ago : append GPL
a137c1d - 1419908068, 2 weeks ago : add distrubute
7908392 - 1419908068, 2 weeks ago : wrote a readme file

git log – pretty=format 常用的选项 列出了常用的格式占位符写法及其代表的意义。

选项说明
%H提交对象(commit)的完整哈希字串
%T树对象的完整哈希
%P父对象(parent)的完整哈希
%an作者
%ae电子邮件
%ad修订日期,可以定制格式
%ar修订日期
%cn提交者名字
%ce提交者邮件
%cd提交日期
%cr
%s提交说明

版本回退

现在已经会上传文件到仓库了,那么在来一遍。修改readme.txt文件如下:

This is a text file.
Git is free software.

然后提交:

$ git add readme.txt
$ git commit -m "first update readme.txt"
[master 778d2dd] first update readme.txt
 1 file changed, 2 insertions(+), 1 deletion(-)

这个时候你发现你更改的内容错了,想回到上个版本或者上上上个版本。那么你怎么还记得内容呢。但是Git就会记得。使用git log查看:在这里插入图片描述
如果你文件更改次数多,输出的信息非常多,那么可以输入git log --pretty=oneline

在这里插入图片描述
友情提示,这里看到的似778d2ddf...的叽里呱啦的是commit id(版本号)

好了,现在我们启动时光穿梭机,准备把readme.txt回退到上一个版本,也就是add distributed的那个版本,怎么做呢?

首先,Git必须知道当前版本是哪个版本,在Git中,用HEAD表示当前版本,也就是最新的提交778d2ddf...(注意我的提交ID和你的肯定不一样),上一个版本就是HEAD^,上上一个版本就是HEAD^^,当然往上100个版本写100个^比较容易数不过来,所以写成HEAD~100

现在,我们要把当前版本first update readme.txt回退到上一个版本add text file,就可以使用git reset命令:

$ git reset --hard HEAD^

先不要关闭命令窗口,在窗口输入cat readme.txt看看内容是不是上个版本的。

$ cat readme.txt
This is a text file.

果然回到了上个版本,不过如果又想回到最新版本,那么问题来了。先输入git log查看一下状态:

$ git log
commit 7b0fa712b2de80d7978dab94643c2cb59aca7c38 (HEAD -> master)
Author: 1419908068 <1419908068@qq.com>
Date:   Mon Dec 2 16:29:25 2019 +0800

    add text file

这里已经没有最新的那个版本的,那么你需要找到之前看的log,找到commit id。输入如下命令可以回到最新版本:

$ git reset --hard 778d2ddf
HEAD is now at 778d2dd first update readme.txt

版本号可以不用写全,前几位就好了。再查看一下内容

$ cat readme.txt
This is a text file.
Git is free software.

没有commit id怎么办,git提供了后悔药,git reflog命令查看你每次的命令

$ git reflog
778d2dd (HEAD -> master) HEAD@{0}: reset: moving to 778d2ddf
7b0fa71 HEAD@{1}: reset: moving to HEAD^
778d2dd (HEAD -> master) HEAD@{2}: commit: first update readme.txt
7b0fa71 HEAD@{3}: commit (initial): add text file

这样又可以找到first update readme.txt的commit id是7b0fa71,然后就又可以改回去了

撤销操作

撤销提交

有时候我们提交完后发现还漏了几个文件,或者提交信息写错了。此时可以使用--amend选项尝试重新提交:

git commit --amend

撤销对文件的修改

如果你修改了文件,但是发现改错了,想回到没修改之前,那么可以使用:

git checkout -- <file>

注意空格

远程仓库

添加远程仓库

现在的情景是,你已经在本地创建了一个Git仓库后,又想在GitHub创建一个Git仓库,并且让这两个仓库进行远程同步,这样,GitHub上的仓库既可以作为备份,又可以让其他人通过该仓库来协作,真是一举多得。

首先,登录GitHub,然后在右上角找到New reposotpry,创建一个新的仓库
在这里插入图片描述
在Repository name填入jar,其他保持默认设置,点击“Create repository”按钮,就成功地创建了一个新的Git仓库:
在这里插入图片描述
目前github上的jar仓库是个空的,那么需要上传本地仓库的话需要吧本地仓库和它关联。根据提示,在命令行中输入命令:

$ git remote add origin https://github.com/ViJar-Wang/jar.git

上面那段网址是github提供的,一眼就能看到,复制下来用就好了。然后通过命令提交。

$ git push -u origin master

如果你是第一次push或者clone,那么会得到一个警告:

The authenticity of host 'github.com (xx.xx.xx.xx)' can't be established.
RSA key fingerprint is xx.xx.xx.xx.xx.
Are you sure you want to continue connecting (yes/no)?

这里输入yes然后回车就好

Git会输出一个警告,告诉你已经把GitHub的Key添加到本机的一个信任列表里了:

Warning: Permanently added 'github.com' (RSA) to the list of known hosts.

这个警告只会出现一次,后面的操作就不会有任何警告了。

如果你实在担心有人冒充GitHub服务器,输入yes前可以对照GitHub的RSA Key的指纹信息是否与SSH连接给出的一致。

回到正题。这个时候去远程仓库看一下:
在这里插入图片描述
会发现github上已经有readme.txt这个文件了。

从远程仓库克隆

当你需要从远处仓库下载的时候,你可以直接下载压缩包文件,也可以通过命令克隆到本地

git clone https://github.com/ViJar-Wang/ViJar-Wang.github.io.git

注意把Git仓库地址换成你自己的,克隆也可以指定目录,在末尾加个路径就好了

创建与合并分支

创建分支

首先,创建test分支然后切换到:

git checkout -b test

git checkout命令加上-b参数表示创建并切换,相当于以下两条命令:

然后,用git branch命令查看当前分支:

$ git branch
* test
  master

git branch命令会列出所有分支,当前分支前面会标一个*号。

合并分支

现在,我们把test分支的工作成果合并到master分支上:

git merge test

删除分支

git branch -d dev

以上所有均参考这位大佬的文章廖雪峰的官方网站

远程仓库分支操作

还是在上面公开版本库的基础上,假如现在有三个开发者,三台客户端,第四台为服务器。服务器地址为:z:\\test.我们现在需要做的是每个人开发一条分支,最后再把所有分支合并起来。

首先我们在服务器的仓库上分配三条新分支:

git breanch b1
git breanch b2
git breanch b3

在客户端1克隆下来仓库中的项目:

git clone z:\\test

这个时候你会发现,客户端1克隆的下来的仓库里面只有一条分支:

$ git branch
* master

但是在服务器是有三条分支的:

$ git branch
  b1
  b2
  b3
* master

如果你修改了文件内容,然后往b1分支push,

$ git push origin b1
error: src refspec b1 does not match any

它会提示你没有足够的权限去操作,那么此时你需要在本地创建一个分支和远程的那个分支绑定起来:

git checkout -b b1 origin/b1

这条语句的意思是创建一个b1分支并切换到,同时和origin中的b1分支绑定。注意:你创建的本地的分支名必须要和远程的分支名一致,否则远程会创建一条新的分支。

现在我们有了和远程绑定的分支,然后把修改的文件push到远程分支b1中去

$ git add readme.txt
$ git commit -m "提交到b1"
[b1 341f980] 提交到b1
 1 file changed, 2 insertions(+), 1 deletion(-)
 $ git push origin b1
Enumerating objects: 5, done.
Counting objects: 100% (5/5), done.
Delta compression using up to 4 threads
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 289 bytes | 289.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To d:\testFile\repo
   8169059..341f980  b1 -> b1

这样就成功提交到远程仓库中去了。

我们在服务器通过git branch -v查看一下分支最新提交记录:

$ git branch -vv
  b1     341f980 提交到b1
  b2     8169059 test1
  b3     8169059 test1
* master 9330421 第一次修改

提交成功。当你在本地不知道远程仓库有哪些分支时,可通过git branch -a来查看远程仓库的分支:

图中红色部分就是远程仓库的分支。

远程分支的合并

现在远程仓库的上床已经搞完了,开始搞定分支的合并

现在我转到客户端2,首先把从库中的东西克隆下来,里面有一个文件readme.txt

$ git clone d:/testFile/repo
Cloning into 'repo'...
done.
$ cd repo
$ cat readme.txt
Hello ,this is the first text.
Hello ,this is the second text.

创建一个分支与服务器绑定:

git checkout -b b2 origin/b2

现在我们分别修改客户端1的readme.txt文件和客户端2的readme.txt。并且修改同一处地方,添加不同的内容:

客户端1:

Hello ,this is the first text.
Hello ,this is the second text.
Hello ,this is the third text.

客户端2:

Hello ,this is the first text.
Hello ,this is the second text.
thi is the b2 branch

分别提交到b1、b2分支中去:

查看服务器分支修改情况:

$ git branch -v
  b1     fa8a5ae b1提交
  b2     c95dbf8 b2修改
  b3     8169059 test1
* master 9330421 第一次修改

修改成功。但是合并有和问题,我们知道是不能在裸仓库操作内容的,所以我们需要先把最后完成的仓库再从远处库克隆下来:

$ git clone z:\\test
Cloning into 'repo'...
done.
$ cd repo
$ cat readme.txt
Hello ,this is the first text.
Hello ,this is the second text.

我们会发现这里的文件还是修改之前的,因为我们还没有合并分支。首先创建并绑定分支,再查看一下提交记录:

$ git checkout -b b1 origin/b1
Switched to a new branch 'b1'
Branch 'b1' set up to track remote branch 'b1' from 'origin'.
$ git log --pretty=format:"%an : %s - %cd"
1419908068 : b1提交 - Mon Dec 9 10:29:34 2019 +0800
1419908068 : 提交到b1 - Mon Dec 9 09:44:24 2019 +0800
1419908068 : test1 - Mon Dec 9 09:29:10 2019 +0800

在这里可以看到已经和远程仓库绑定了,在同样的操作绑定b2。然后开始合并,首先把b1合并到master中去:

$ git merge b1
Auto-merging readme.txt
CONFLICT (content): Merge conflict in readme.txt
Automatic merge failed; fix conflicts and then commit the result.

cat查看一下readme.txt中的内容:

$ cat readme.txt
Hello ,this is the first text.
<<<<<<< HEAD
Hello ,this is the second text.
=======
Hello ,this is the second text.
Hello ,this is the third text.
>>>>>>> b1

出错了啊。HEAD是只上个版本的内容,======下面是合并的内容,如果想要保留合并的内容只需要执行以下命令:

$ git reset --hard HEAD^
HEAD is now at 8169059 test1
$ git merge b1
Updating 8169059..fa8a5ae
Fast-forward
 readme.txt | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

在查看一下:

$ cat readme.txt
Hello ,this is the first text.
Hello ,this is the second text.
Hello ,this is the third text.

这样b1就合并成功了。同理合并完b2也会出现同样的错误:

$ git merge b2
Auto-merging readme.txt
CONFLICT (content): Merge conflict in readme.txt
Automatic merge failed; fix conflicts and then commit the result.
$ cat readme.txt
Hello ,this is the first text.
Hello ,this is the second text.
<<<<<<< HEAD
Hello ,this is the third text.
=======
thi is the b2 branch
>>>>>>> b2

你想好保留哪个版本的只要回退一个版本再合并一次就好了。
远程分支删除

git push origin --delete b3

图形化界面

Git 的原生环境是终端。 在那里,你可以体验到最新的功能,也只有在那里,你才能尽情发挥 Git 的全部能

力。 但是对于某些任务而言,纯文本并不是最佳的选择;有时候你确实需要一个可视化的展示方式,而且有些

用户更习惯那种能点击的界面。

git-gui是在安装git的同时也会装好的可视化工具。默认界面为英文,我这里参考这里修改成了中文。

https://www.cnblogs.com/webSong/p/11009403.html

错误收集

1.报错fatal: remote origin already exists.

git remote rm origin

2.报错The authenticity of host 'github.com ' can't be established

这是由于你的git地址采用了ssh方式,切换为https方式即可,也可能是你的仓库地址不对,可以用命令先查看一下:

git remote -v

如果跟你的github地址不一样,那就去你的github上复制一下仓库地址
然后在终端中输入:

git remote set-url origin https://github.com/yourname/learngit.git (这个是你的复制的仓库地址)

最后再push下就可以了!

git push origin master 

3.报错Updates were rejected because the remote contains work that you do

在push之前输入:

git pull origin master
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 《Git教程廖雪峰PDF》是一本非常受欢迎的学习Git版本控制工具的教程。这本教程由知名的计算机程序员廖雪峰所编写,以简洁明了的语言和实际操作示例,向读者介绍了Git的基本概念和使用方法。 这本教程Git的起源和基础开始介绍,以帮助读者了解为什么Git成为现代软件开发必备的工具。然后,教程详细介绍了Git的安装和配置,包括如何创建和克隆仓库,添加、提交和查看文件的历史记录等等。同时,教程还介绍了如何使用分支、合并、解决冲突等高级功能,以及如何与远程仓库进行交互和协作。 这本教程采用了一种循序渐进的方式,通过一步步的实例演示和练习,帮助读者逐渐掌握Git的基本操作和常用命令。并且,教程还涉及了一些高级主题,如打标签、忽略文件、子模块等,以满足读者的不同需求。 廖雪峰作为一位经验丰富的程序员,他在教程中还分享了一些他个人在使用Git过程中的一些心得和建议,这对于读者来说是非常有价值的。总体来说,《Git教程廖雪峰PDF》是一本浅显易懂、实用性强的Git入门教程,适合初学者和有一定基础的开发者阅读和学习。无论是作为参考资料还是学习教程,这本书都能够帮助读者快速掌握Git的基本使用技巧,提高版本控制和团队协作能力。 ### 回答2: 《Git教程廖雪峰PDF》是一本由知名程序员廖雪峰编写的关于Git版本控制工具的教程。这本教程以简洁明了的方式,详细介绍了Git的原理、基本操作和常见使用场景。 首先,教程Git的基本概念入手,向读者介绍了Git的核心理念:分布式版本控制,并与集中式版本控制工具进行了对比。接着,教程详细介绍了如何安装Git,并通过简单的命令行操作演示了基本的Git使用方法,如创建仓库、添加文件、提交变更等。 除了基本操作,教程还介绍了Git工作区、暂存区和版本库的概念,以及常用的分支管理策略。同时,教程还重点讲解了远程仓库的使用,包括如何与Github等网站协同工作、如何进行分支合并和冲突解决等。 此外,教程还提供了一些高级应用技巧,如如何使用Git进行代码回滚、如何管理大型项目等。同时,教程中穿插了一些案例和示例,帮助读者更好地理解和应用Git。 总的来说,《Git教程廖雪峰PDF》是一本很好的入门教程。通过该教程学习,读者可以了解Git的基本概念和操作方法,同时也能够掌握一些高级应用技巧。该教程以简单易懂的语言和清晰明了的实例,使得读者可以较快地上手Git,并在实际项目中应用所学知识。无论是初学者还是有一定经验的开发者,都能够从《Git教程廖雪峰PDF》中获得实用的Git技巧和经验。 ### 回答3: 《Git教程廖雪峰pdf》是一本详细介绍Git版本控制系统的教程,由知名程序员、技术作者廖雪峰所著。教程总共分为五个部分,包括了Git的基本概念、安装与配置、基础操作、团队协作和Git衍生工具。 在这本教程中,廖雪峰首先介绍了Git的基本概念,包括仓库、提交、分支、合并等。通过这些概念的解释,读者可以对Git的工作原理有一个初步的了解。 然后,廖雪峰详细介绍了Git的安装与配置,包括了Windows、Mac和Linux系统的安装步骤,以及Git的基本配置和常用命令。这部分内容对于初学者来说非常实用,可以帮助他们快速入门Git。 接着,廖雪峰介绍了Git的基础操作,包括了创建仓库、提交修改、查看修改记录等。通过这些操作的演示,读者可以掌握Git的基本使用方法。 在团队协作部分,廖雪峰教授了使用远程仓库进行团队协作的方法,例如克隆远程仓库、推送修改、拉取更新等。这部分内容对于多人协作或开源项目的参与者来说尤为重要,可以帮助他们高效地进行代码管理与版本控制。 最后,廖雪峰介绍了一些基于Git的衍生工具,如GitHub、GitLab和Bitbucket等。这些工具提供了更多的协作和管理功能,能够帮助开发者更好地利用Git进行项目管理和版本控制。 总的来说,《Git教程廖雪峰pdf》是一本非常实用的Git入门教程,对于初学者或有一定经验的开发者来说都非常有帮助。通过学习这本教程,读者可以快速掌握Git的基本操作和团队协作的方法,从而更好地管理和控制代码的版本。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值