Git学习笔记

一、Git概述

(一)什么是Git

    Git是一个开源的分布式版本控制系统(Distributed Version Control System,简称DVCS)。可以有效、高速地处理从很小到非常大的项目版本管理。

(二)什么是版本控制系统?

    版本控制系统能追踪项目,从开始到结束的整个过程。对编程人员而言,版本控制技术是团队协作开发的桥梁,助力于多人协作同步进行大型项目开发。软件版本控制系统的核心任务:查阅项目历史操作记录、实现协同开发。

(三)常见的版本控制系统

① 集中式版本控制工具
    集中式版本控制工具,版本仓库是集中存放在中央服务器的,team里每个人工作时,从中央 服务器下载代码。每个人个人修改后,提交到中央版本仓库。提交(commit)代码需要联网。如:svn
    这会造成一个明显的问题:单点故障

② 分布式版本控制工具
    分布式版本控制系统可以没有 “中央服务器”,每个人的电脑上都是一个完整的版本仓库,这样工作的时候,不需要联网。因为版本仓库就在你自己的电脑上。多人协作只需要各自修改,开发完成即可,推送给对方【联网】,推送的时候是将整个版本仓库推过去。如:Git

(四)Git的特点

① 速度、简单的设计
② 对非线性开发模式的强力支持(允许成千上万个并行开发的分支)
③ 完全分布式
④ 有能力高效管理类似 Linux 内核一样的超大规模项目(速度和数据量)
⑤ 协同开发

Clone:克隆,从远程仓库中克隆代码到本地仓库,第一次操作
Push:推送,代码完成后,需要和团队成员共享代码时,将代码推送到远程仓库。
Pull:拉取,从远程库拉代码到本地库,自动进行合并(merge),最后放到工作区。

checkout:将本地仓库的内容检出到工作区
add:在提交前先将代码提交到暂存区
commit:提交到本地仓库

(五)基本概念

本地仓库: 在本地主机上的一个代码库,可以独立存在,也可以与远程仓库进行关联
工作区:对任何文件的修订(增删改),都先放在工作区,工作区不与任何仓库分支进行关联 暂存区:把修订的文件,从工作区经过add(添加)后与某一个仓库分支进行关联,只要进 入缓存区的文件才能commit(提交)到本地仓库。
远程仓库 : 在局域网或互联网上的一个主机,存放代码库的主机或平台,比如GitHub、 Gitee.com(码云)
分支:代码存放在仓库,默认是主分支(master),可以在主分支基础上创建很多子分支,比如 develop(开发)、bugfix(bug修复)等。

二、Git的下载和安装

(一)下载

下载地址:https://git-scm.com/download
镜像地址:http://npm.taobao.org/mirrors/git-for-windows

(二)安装

傻瓜式安装:一路下一步。安装完成后在电脑桌面右击显示
注:
    Git GUI Here:Git提供的图形界面工具
    Git Bash Here:Git提供的命令行工具

三、Git的基本配置

1.安装完成 Git 后,正式使用git前,是需要进行一些全局设置的,如用户名、邮箱。
# 设置全局用户名
git config --global user.name "your name"
# 设置邮箱
git config --global user.email "your email"

    以上配置信息默认存储在用户目录下,如果设置错误,可以删除以下如图文件,重新操作以上命令即可。

2. 查看配置信息:git config --list

3. 构建本地仓库:要使用Git对我们的代码进行版本控制,首先需要构建本地仓库
    ① 在本地初始化一个Git仓库
    ② 从远程仓库克隆一个仓库

本地仓库的相关操作

1. 在本地初始化一个Git仓库:
    - 在电脑的任意位置创建一个空目录作为我们的本地Git仓库
    - 进入这个目录中,点击右键打开Git bash窗口
    - 执行命令Git init


    如果在当前目录中看到.git文件夹(此文件夹为隐藏文件夹)则说明Git仓库创建成功

 

2. 查看文件状态:
    git status [-s]

3. 将文件添加(修改)到版本库

    先在此目录下新建一个txt文档文件
    要将一个文件纳入到版本库管理,首先要将其添加到暂存区,然后才能提交到仓库中。
    # 添加单个文件到暂存区
    git add Readme.txt
    # 将当前目录下所有修改添加到暂存区,除按照规则忽略的之外
    git add .

4. 将暂存区中的文件,提交到仓库中
    # 如果暂存区有文件,则将其中的文件提交到仓库
    git commit
    # 带评论提交,用于说明提交内容、变更、作用等
    git commit -m 'your comments'

5.修改文件信息

 6.再次进行提交

7. 查看提交历史记录
    有的时候,是会需要查看自己做过哪些提交,来回顾自己完成的部分。或者需要寻找某个具体的提交来
查看当时的代码。
    git log # 显示所有提交的历史记录
    git log --pretty=oneline # 单行显示提交历史记录的内容

8.再次进行修改文件信息,然后add、commit

9. 版本回退
    有了 git log 来查看提交的历史记录,我们就可以通过 git reset --hard 来回退到我们需要的特定版本,然后使用当时的代码进行各种操作。
    # 回退到 commit_id 指定的提交版本
    git reset --hard 'commit_id'

10、回退版本的结果 

11.查看历史退回结果

12. 退回到退回之前的版本
    当退回到某个提交的版本以后,再通过 git log 是无法显示在这之后的提交信息的。但是,通过 git reflog 可以获取到操作命令的历史。因此,想要回到未来的某个提交,先通过 git reflog 从历史命令中找到想要回到的提交版本的 ID, 然后通过 git reset --hard 来切换。
    git reflog
    git reset --hard 'commit_id'

13.退回结果

14. 删除文件
    在文件未添加到暂存区之前,对想删除文件可以直接物理删除。如果文件已经被提交,则需要 git rm来删除
    git rm Readme.txt // 删除已经被提交过的 Readme.txt
注意: git rm 只能删除已经提交到版本库中的文件。其他状态的文件直接用这个命令操作是出错的。

在演示之前,先创建两个文件

        add.txt文件只进行提交

         commit.txt进行add和commit

        从下图结果来可以看到commit.txt文件被成功删除 ,add.txt删除失败

四、分支管理

(一)查看分支

# 查看本地分支信息 
git branch
# 查看相对详细的本地分支信息
git branch -v
# 查看包括远程仓库在内的分支信息
git branch -av
注意:前面带有*号,这标识我们当前所在的分支

(二)创建分支

# 新建一个名称为 dev 的分支
git branch dev

(三)切换分支

# 新建完 dev 分支以后,通过该命令切换到 dev 分支
git checkout dev
注意:当我们创建完分支以后,我们需要切换到新建的分支,否则,所有的修改,还是在原来的分支上。事实上,所有的改动,只能影响到当前所在的分支。

(四)创建并切换分支

# 新建 dev 分支,并切换到该分支上
git checkout -b dev

1.在dev分支下新建文件demo.txt

2. 提交文件demo.txt

 3.切换分支到master,查看结果,发现demo.txt消失

(五)合并分支

# 切换回 master 分支
git checkout master
# 将 dev 分支中的修改合并回 master 分支
git merge dev
注意:分支修改文件中如果有换行的话会报错

解决:Git默认配置替换回车换行成统一的CRLF,我们只需要修改配置禁用该功能即可。
git config --global core.autocrlf false

(六)删除分支

    当之前创建的分支,完成了它的使命,如 Bug 修复完,分支合并以后,这个分支就不在需要了,就可 以删除它。
# 删除dev分支
git branch -d dev

五、远程仓库

    现在我们已经在本地创建了一个Git仓库,又想让其他人来协作开发,此时就可以把本地仓库同步到远 程仓库,同时还增加了本地仓库的一个备份。那么我们如何搭建Git远程仓库呢?我们可以借助互联网上提供的一些代码托管服务平台来实现,其中 比较常用的有GitHub、码云等。
    -- GitHub( 地址:https://github.com/ )是一个面向开源及私有软件项目的托管平台,因为只支持 Git 作为唯一的版本仓库格式进行托管,故名GitHub
    -- 码云(地址: https://gitee.com/ )是国内的一个代码托管平台,由于服务器在国内,所以相比于 GitHub,码云速度会更快。
    接下来我们演示如何将本地仓库中的代码同步到gitee。和码云的操作一模一样

(一)注册账号

① 第一步,点击注册按钮

② 填写真实信息

③ 邮箱验证

(二)登录使用

以上步骤登录到该网址进行操作就行 

六、同步远程仓库

    Gitee支持两种同步方式“https”和“ssh”。如果使用https很简单基本不需要配置就可以使用,但是每次 提交代码和下载代码时都需要输入用户名和密码。而且如果是公司配置的私有git服务器一般不提供 https方式访问,所以我们要来着重演示“ssh”方式。

(一)https克隆

命令:git clone https地址

在进行clone之前,先新建一个远程仓库

然后进行克隆,输入以下指令git clone https地址

(二)ssh配置

    SSH是英文Secure Shell的简写形式。通过使用SSH,你可以把所有传输的数据进行加密,这样"中间 "这种攻击方式就不可能实现了,而且也能够防止DNS欺骗和IP欺骗。使用SSH,还有一个额外的好处 就是传输的数据是经过压缩的,所以可以加快传输的速度。
    注:使用SSH同步方式需要先生成密钥并在GitHub配置公钥

执行命令,生成公钥和私钥:
    ssh-keygen -t rsa
执行命令完成后,在window本地用户.ssh目录C:\Users\用户名.ssh下面生成如下名称的公钥和私钥

密钥生成后需要在github上配置密钥,本地才可以顺利访问。

1.新建一个文件夹,然后在文件夹里面右键打开git配置公钥和私钥

 2.查看和复制公钥

3.在gitee设置里面添加公钥

 4.添加公钥成功

七、远程仓库的操作

(一)查看远程仓库

    如果想查看已经配置的远程仓库服务器,可以运行 git remote 命令。 它会列出指定的每一个远程服务 器的简写。 如果已经克隆了远程仓库,那么至少应该能看到 origin ,这是 Git 克隆的仓库服务器的默 认名字

# 命令形式:
git remote -v
# origin ——仓库服务器的默认名称
注:如果显示空,没有添加远程仓库。如果添加显示远程仓库地址

(二)添加远程仓库

如果已经有了一个本地仓库,,然后打算将它发布到远程,供其他人协作。
那么使用命令:
# 为本地仓库添加远程仓库
git remote add origin 远程仓库地址
如:git remote add origin https://gitee.com/junguang00/git_demo01.git

注:
     提示出错信息:fatal: remote origin already exists.
     先输入
        $ git remote rm origin
     再输入:
        git remote add origin 远程仓库地址

查看同步完的结果

(三)推送本地内容到远程仓库

# 在本地仓库更新内容 添加暂存区
git add .
# 提交内容
git commit -m '信息'
# 当本地仓库中,代码完成提交,就需要将代码等推送到远程仓库,这样其他协作人员可以从远程仓库同步内容。
# 第一次推送时使用,可以简化后面的推送或者拉取命令使用
git push -u origin master
# 将本地 master 分支推送到 origin 远程分支
git push origin master
    注意:
       ① git push -u origin master ,第一次使用时,带上 -u 参数,在将本地的 master 分支推送 到远程新的 master 分支的同时,还会把本地的 master 分支和远程的 master 分支关联起来。
       ② 推送之前,需要先pull远端仓库,如果发现提交版本不一致,出现错误

查看推送完的结果

(四)获取远程仓库更新

    在多人协作过程中,当自己完成了本地仓库中的提交,想要向远程仓库推送前,需要先获取到远程仓库的最新内容。使用如下命令
    git fetch origin master
    git pull origin master
git fetch 和 git pull 之间的区别:
    git fetch 是仅仅获取远程仓库的更新内容,并不会自动做合并。
    git pull 在获取远程仓库的内容后,会自动做合并,可以看成 git fetch 之后 git merge 。

(五)移除无效的远程仓库

# 命令形式:
git remote rm <shortname>
注意:此命令只是从本地移除远程仓库的记录,并不会真正影响到远程仓库

(六)从远程仓库克隆

    Git 克隆的是该 Git 仓 库服务器上的几乎所有数据(包括日志信息、历史记录等),而不仅仅是复制工作所需要的文件。 当你 执行 git clone 命令的时候,默认配置下远程 Git 仓库中的每一个文件的每一个版本都将被拉取下来。
    如果你本地没有仓库,希望从已有的远程仓库上复制一份代码,那么你需要 git clone 。
    # 通过 https 协议,克隆 Github 上 git 仓库的源码
    git clone https://github.com/lagou-zimu/repo1.git
    # 通过 ssh 协议,克隆 Github 上 git 仓库的源码
    git clone git@github.com:lagou-zimu/repo1.git

1.新建文件,在该文件下进行初始化

 2.查看远程仓库

(七)从远程仓库中拉取

# 拉取 命令形式:git pull【远程仓库名称】【分支名称】

 (八)没有配置信息的直接克隆

(九)解决合并冲突

在一段时间,A、B用户修改了同一个文件,且修改了同一行位置的代码,此时会发生合并冲突。
例如:
    A用户在本地修改代码后优先推送到远程仓库,此时B用户在本地修订代码,提交到本地仓库后,也需 要推送到远程仓库,此时B用户晚于A用户推送,故需要先拉取远程仓库代码,经过合并后才能推送代 码。在B用户拉取代码时,因为A、B用户同一段时间修改了同一个文件的相同位置代码,故会发生合并 冲突。

如下图所示:

解决:
    ① 先拉取代码
    ② 打开代码解决冲突
    ③ 再提交

结果

(十)小结

远程仓库常见操作命令:
git remote #查看所有远程仓库名称
git remote -v #查看远程仓库缩略信息
git push origin master # 将本地仓库代码推送到远程仓库
git clone https://github.com/lagou-zimu/repo1.git # 克隆远程仓库代码到本地 git pull origin master # 拉取远程仓库代码到本地:(fetch+merge)

八、Idea中集成Git

(一)在idea中配置Git

在IDEA里面打开设置,然后搜索git 。配置git的路径

(二)Idea的Git操作

1.初始化并提交项目到远程仓库 【项目leader操作】

① 初始化并提交项目到远程仓库 【项目leader操作】
执行步骤:
    1. 在GitHub/码云中创建远程仓库
    2. 将工程交给Git管理
    3. 配置忽略文件
    4. 提交到本地仓库
    5. 推送到远程仓库

② 在github上创建仓库

③ 将工程交给Git管理

④ 配置忽略文件

⑤ 提交到本地仓库

add

commit 

添加提交信息 

⑥ 推送到远程仓库

push

 根据上述新建仓库的ssh地址进行push

查看push的结果 

2. 克隆远程仓库到本地【开发人员】

① 从远程仓库克隆

来到idea的主页里面点击GetFromVSC然后复制仓库的ssh地址进行克隆

(三)Idea中Git的常见操作【开发人员重点】

① 新增文件:新文件状态红色,未进入暂存区

加入git之后,红色变绿色,已经进入暂存区

② 编辑文件:修改文件 变成蓝色
正常编辑的文件默认放在暂存区,不需要再添加到暂存区

③ 重置文件到修改前
比如修订了某一文件,需要重置到修改文件之前的状态,选择文件,右键菜单:选择Git--->Revert
重置后,文件颜色自动消失,说明已重置到修改之前的状态。

查看重置后的结果

④ 提交当前文件

⑤ 本地仓库推送到远程仓库

查看push后的结果

(四)分支操作

操作步骤:
    1. 创建分支
    2. 切换分支执行操作
    3. 执行合并操作,master合并dev
    4. 同步远程仓库

① 创建分支

 

② 切换分支执行操作

新建分支dev1 

提交分支dev1

 

添加提交信息 

 ③ 执行合并操作(将dev分支合并到master分支)

 合并完的结果

④ 同步远程仓库

 合并完之后进行push操作

 查看push后的结果

(五)分支冲突

        冲突:如果A、B两个分支都在操作同一文件。当A分支提交远程仓库之后,B分支再提交的话会产生冲突

冲突的引入:

        在master分支下操作

        master分支操作后进行提交 

         切换分支到dev1

         然后再dev1分支里面进行修改

         然后进行分支的合并

         出现问题

解决:先拉取,解决完冲突,再push

操作步骤:
    1. 推送前一定要先拉取远程仓库对应分支
    2. 如果有冲突,先解决冲突,并提交到本地仓库
    3. 推送当前分支到远程仓库

 

 

 然后进行push

 查看push后的结果

(六)多用户克隆问题解决

问题引入

        假设有一个用户User1进行克隆文件 

         

        User1修改了文件内容然后进行提交 

         User1根据ssh地址进行了推送push

         然后User1也是使用User1的SSH地址来进行修改并提交

         提交完之后进行push

出现问题

 解决问题

 

         查看解决后的结果

(七)查看提交历史提交

        然后选择版本双击就能回退到修改的版本 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值