Git学习笔记

Git

一、Git概述

1、Git定义:

Git是一个免费的、开源的分布式版本控制系统,可以快速高效的处理从小型到大型的各种项目。

Git易于学习,占地面积小,性能极快。它具有廉价的本地库,方便的暂存区和多个工作流分支等特性。其性能优于Subversion、CVS、Perforce和ClearCase等版本控制工具。

1、何为版本控制?
版本控制是一种记录文件内容变化,以便将来查阅特定版本修订情况的系统。
版本控制其实最重要的是可以记录文件修改历史记录,从而让用户能够查看历史版本,方便版本切换。
1、为么需要版本控制?
从个人开发到团队协作。
2、版本控制工具
  • 集中式版本控制工具

    	CVS、SVN(subversion)、VSS
    	集中化的版本控制系统诸如CVS、SVN等,都有一个单一的集中管理的服务器,保存所有文件的修订版本,而协同工作的人们都通过客户端连接到这台服务器,取出最新的文件或者提交更新。多年以来,这已经成为版本控制系统的标准做法。
    	这种做法带来了许多好处,每个人都可以在一定程度上看到项目中的其他人正在做什么。而管理员也可以轻松掌握每个开发者的权限,并且管理一个集中化的版本控制系统,要远比各个客户端上维护本地数据库来得轻松容易。
    	事分两面,有好有坏。这么做显而易见的缺点是中央服务器的单点故障。如果服务器宕机一小时,那么在这一小时内,谁都无法提交更新,也就无法系统工作。
    
  • 分布式版本控制工具

    	Git、Mercurial、Bazaar、Darcs
    	像Git这种分布式版本控制工具,客户端提取的不是最新版本的文件快照,而是把代码仓库完整地镜像下来(本地库)。这样任何一处协同工作用的文件发生故障,事后都可以用其他客户端的本地仓库进行恢复。因为客户端的每一次文件提取操作,实际上都是一次对整个文件仓库的完整备份。
    	分布式的版本控制系统出现以后,解决了集中式版本控制系统的缺陷:
    	1.服务器断网的情况下也可以进行开发(因为版本控制是在本地进行的)
    	2.每个客户端保存的也都是整个完整的项目(包含历史记录,更加安全)
    	
    
3、Git发展历史
image-20221014151514889
4、Git工作机制
			工作区(写代码)
			     |
			     | git add
			     |
			暂存区(临时存储)
				 |
				 | git commit
				 |
			本地库(历史版本)
5、Git和代码托管中心

代码托管中心是基于网络服务器的远程代码仓库,一般我们简单称为远程库

  • 局域网
    • GitLab
  • 互联网
    • GitHub(外网)
    • Gitee码云(国内网站)

二、Git常用命令


概要
语法作用
git config --global user.name 用户名设置用户名
git config --global user.email 邮箱设置用户邮箱
git init初始化本地库
git status查看本地库状态
git add 文件名添加暂存区
git rm --cached 文件名移除暂存区
git commit -m “日志信息” 文件名提交本地库
git reflog 查看简略信息 git log 查看详细信息查看版本信息
git reset --hard 简略版本号版本穿梭
1、设置用户签名
12086@DESKTOP-VPJ7A44 MINGW64 ~/Desktop
#设置用户名
$ git config --global user.name gzb
#设置用户邮箱
12086@DESKTOP-VPJ7A44 MINGW64 ~/Desktop
$ git config --global user.email 1208644355@qq.com

在Windows家目录下查看配置文件C:\Users\12086.gitconfig

[user]
	name = gzb
	email = 1208644355@qq.com

1、初始化本地库
12086@DESKTOP-VPJ7A44 MINGW64 /e/Git-Space/demo01

$ git init

Initialized empty Git repository in E:/Git-Space/demo01/.git/

2、查看本地库状态
git status
3、添加暂存区
$ git add temp.txt

warning: in the working copy of 'temp.txt', LF will be replaced by CRLF the next time Git touches it
4、移出暂存区
$ git rm --cached temp.txt
rm 'temp.txt'
5、提交本地库
git commit -m "日志信息" 文件名
$ git commit -m "first commit" temp.txt

warning: in the working copy of 'temp.txt', LF will be replaced by CRLF the next time Git touches it
[master (root-commit) 211a689] first commit
 1 file changed, 9 insertions(+)
 create mode 100644 temp.txt
6、查看版本信息

方式一:简略版

git reflog
$ git reflog

211a689 (HEAD -> master) HEAD@{0}: commit (initial): first commit

方式二:详细版

git log
$ git log

commit 211a6896c752889caa818e041b0887f989995287 (HEAD -> master)
Author: gzb <1208644355@qq.com>
Date:   Sat Oct 15 09:02:55 2022 +0800

    first commit

7、修改文件
12086@DESKTOP-VPJ7A44 MINGW64 /e/Git-Space/demo01 (master)
#修改文件
$ vim temp.txt

12086@DESKTOP-VPJ7A44 MINGW64 /e/Git-Space/demo01 (master)
#查看git状态信息
$ git status

On branch master
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
        modified:   temp.txt

no changes added to commit (use "git add" and/or "git commit -a")

12086@DESKTOP-VPJ7A44 MINGW64 /e/Git-Space/demo01 (master)
#将修改的文件添加到暂存区
$ git add temp.txt

warning: in the working copy of 'temp.txt', LF will be replaced by CRLF the next time Git touches it

12086@DESKTOP-VPJ7A44 MINGW64 /e/Git-Space/demo01 (master)
#查看git状态信息
$ git status
On branch master
Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
        modified:   temp.txt

12086@DESKTOP-VPJ7A44 MINGW64 /e/Git-Space/demo01 (master)
#提交到本地库
$ git commit -m "second commit" temp.txt

warning: in the working copy of 'temp.txt', LF will be replaced by CRLF the next time Git touches it
[master 11d6055] second commit
 1 file changed, 5 insertions(+)


12086@DESKTOP-VPJ7A44 MINGW64 /e/Git-Space/demo01 (master)
#查看git详细的版本信息
$ git log

commit 11d6055ce1c0009dcdf8a0b59fadc3cffbecb890 (HEAD -> master)
Author: gzb <1208644355@qq.com>
Date:   Sat Oct 15 09:15:59 2022 +0800

    second commit

commit 211a6896c752889caa818e041b0887f989995287
Author: gzb <1208644355@qq.com>
Date:   Sat Oct 15 09:02:55 2022 +0800

    first commit

8、版本穿梭(也就是修改head指针所指向的版本)

语法:

#版本穿梭,也就是修改head指针
$ git reset --hard 简略版本号
12086@DESKTOP-VPJ7A44 MINGW64 /e/Git-Space/demo01 (master)
#查看temp.txt文件,此时是第二个版本的文件
$ cat temp.txt
Hello World!
Hello World!
Hello World!
Hello World!
Hello World!
Hello World!
Hello World!
Hello World!
Hello World!
public static main(String[]args) {
        System.out.println("Hello World");
}


12086@DESKTOP-VPJ7A44 MINGW64 /e/Git-Space/demo01 (master)
#查看简略的版本信息
$ git reflog
#当前head指针指向第二个版本
11d6055 (HEAD -> master) HEAD@{0}: commit: second commit
211a689 HEAD@{1}: commit (initial): first commit

12086@DESKTOP-VPJ7A44 MINGW64 /e/Git-Space/demo01 (master)
#版本穿梭,也就是修改head指针
$ git reset --hard 211a689
HEAD is now at 211a689 first commit

12086@DESKTOP-VPJ7A44 MINGW64 /e/Git-Space/demo01 (master)
#查看版本信息,此时head指针已经指向了第一个版本
$ git reflog
211a689 (HEAD -> master) HEAD@{0}: reset: moving to 211a689
11d6055 HEAD@{1}: commit: second commit
211a689 (HEAD -> master) HEAD@{2}: commit (initial): first commit

12086@DESKTOP-VPJ7A44 MINGW64 /e/Git-Space/demo01 (master)
#查看temp.txt文件,此时是第一个版本的文件
$ cat temp.txt
Hello World!
Hello World!
Hello World!
Hello World!
Hello World!
Hello World!
Hello World!
Hello World!
Hello World!

9、查看当前分支指向:
E:\Git-Space\demo01\.git\HEAD
ref: refs/heads/master
10、查看当前分支指向的版本
E:\Git-Space\demo01\.git\refs\heads\master
211a6896c752889caa818e041b0887f989995287

三、Git分支操作


1、什么是分支?
	在版本控制中,同时推进多个任务,为每个任务,我们就可以创建每个任务的单独分支。使用分支意味着程序员可以把自己的工作从开发主线上分离开来,开发自己分支的时候,不会影响主线分支的运行,对于初学者而言,分支可以简单理解为副本,一个分支就是一个单独的副本。(分支底层其实也是指针的引用)
2、分支的好处
1.同时并行推进多个功能开发,提高开发效率。
2.各个分支在开发过程中,如果其中一个分支开发失败,不会对其他分支有任何影响。失败的分支删除重新开始即可。
3、分支的操作
命令名称作用
git branch 分支名创建分支
git branch -v查看分支
git checkout 分支名切换分支
git merge 分支名把指定的分支合并到当前分支上
1)查看分支
git branch -v
$ git branch -v
* master 211a689 first commit
2)创建分支
git branch 分支名
#创建分支
$ git branch hot-fix

12086@DESKTOP-VPJ7A44 MINGW64 /e/Git-Space/demo01 (master)
#查看当前分支
$ git branch -v
  hot-fix 211a689 first commit
* master  211a689 first commit
3)切换分支
git checkout 分支名
#切换分支
$ git checkout hot-fix
Switched to branch 'hot-fix'

#修改文件
12086@DESKTOP-VPJ7A44 MINGW64 /e/Git-Space/demo01 (hot-fix)
$ vim temp.txt

12086@DESKTOP-VPJ7A44 MINGW64 /e/Git-Space/demo01 (hot-fix)
#查看文件状态
$ git status
On branch hot-fix
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
        modified:   temp.txt

no changes added to commit (use "git add" and/or "git commit -a")

12086@DESKTOP-VPJ7A44 MINGW64 /e/Git-Space/demo01 (hot-fix)
#将文件提交到暂存区
$ git add temp.txt

12086@DESKTOP-VPJ7A44 MINGW64 /e/Git-Space/demo01 (hot-fix)
#查看状态
$ git status
On branch hot-fix
Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
        modified:   temp.txt


12086@DESKTOP-VPJ7A44 MINGW64 /e/Git-Space/demo01 (hot-fix)
#提交暂存区中的temp.txt文件到本地库
$ git commit -m "hot-fix first commit" temp.txt
[hot-fix 18eb611] hot-fix first commit
 1 file changed, 1 insertion(+)

12086@DESKTOP-VPJ7A44 MINGW64 /e/Git-Space/demo01 (hot-fix)
#查看简略的日志信息
$ git reflog
#当前head指针指向了hot-fix分支的first commit版本
18eb611 (HEAD -> hot-fix) HEAD@{0}: commit: hot-fix first commit
211a689 (master) HEAD@{1}: checkout: moving from master to hot-fix
211a689 (master) HEAD@{2}: reset: moving to 211a689
11d6055 HEAD@{3}: commit: second commit
211a689 (master) HEAD@{4}: commit (initial): first commit

4)合并分支

git merge 分支名
#合并分支
$ git merge hot-fix
Updating 211a689..18eb611
Fast-forward
 temp.txt | 1 +
 1 file changed, 1 insertion(+)
 
#重新查看文件
12086@DESKTOP-VPJ7A44 MINGW64 /e/Git-Space/demo01 (master)
$ cat temp.txt
Hello World!
Hello World!
Hello World!
Hello World!
Hello World!
Hello World!
Hello World!
Hello World!
Hello World!
This is hot-fix!
#文件已经修改

5)合并冲突(解决冲突问题)

#当master修改了原文件并且hot-fix修改了原文件时,再次合并会发生冲突
12086@DESKTOP-VPJ7A44 MINGW64 /e/Git-Space/demo01 (master)
#合并hot-fix分支
$ git merge hot-fix
Auto-merging temp.txt
#合并冲突
CONFLICT (content): Merge conflict in temp.txt
#提示自动合并失败,需要手动修改文件并提交
Automatic merge failed; fix conflicts and then commit the result.

#手动修改文件
12086@DESKTOP-VPJ7A44 MINGW64 /e/Git-Space/demo01 (master|MERGING)
$ vim temp.txt

#查看修改后的文件
12086@DESKTOP-VPJ7A44 MINGW64 /e/Git-Space/demo01 (master|MERGING)
$ cat temp.txt
Hello World!
Hello World!
Hello World!
Hello World!
Hello World!
Hello World!
Hello World!
Hello World!
Hello World!
This is master(master second version)!
This is hot-fix!(second version)

#查看状态
12086@DESKTOP-VPJ7A44 MINGW64 /e/Git-Space/demo01 (master|MERGING)
$ git status
On branch master
You have unmerged paths.
  (fix conflicts and run "git commit")
  (use "git merge --abort" to abort the merge)

Unmerged paths:
  (use "git add <file>..." to mark resolution)
        both modified:   temp.txt

no changes added to commit (use "git add" and/or "git commit -a")

12086@DESKTOP-VPJ7A44 MINGW64 /e/Git-Space/demo01 (master|MERGING)
#将文件添加到暂存区
$ git add temp.txt

12086@DESKTOP-VPJ7A44 MINGW64 /e/Git-Space/demo01 (master|MERGING)
#提交文件
$ git commit -m "merge test" temp.txt #注意不能带有文件名
fatal: cannot do a partial commit during a merge.

12086@DESKTOP-VPJ7A44 MINGW64 /e/Git-Space/demo01 (master|MERGING)
$ git commit -m "merge test"
[master 7d4553b] merge test

#手动合并成功
12086@DESKTOP-VPJ7A44 MINGW64 /e/Git-Space/demo01 (master)
$

四、团队协作机制

1、团队内协作
image-20221015200529855
2、跨团队协作

image-20221015200829617

五、GitHub操作


1、创建远程仓库

GitHub网址:https://github.com/

Ps:全球最大的同性交友网站,技术宅男的天堂,新世界的大门。

2、远程仓库操作
命令名称作用
git remote查看当前所有远程地址别名
git remote add 别名 远程地址起别名
git push 别名 分支推送本地分支上的内容到远程仓库
git clone 远程地址将远程仓库的内容克隆到本地
git pull 远程库地址别名 远程分支名将远程仓库对于分支最新内容拉下来后与当前本地分支直接合并
  • 创建别名

    #创建别名
    $ git remote add demo01 https://github.com/007264/demo01
    
    #查看当前有哪些别名
    12086@DESKTOP-VPJ7A44 MINGW64 /e/Git-Space/demo01 (master)
    $ git remote -v
    
    12086@DESKTOP-VPJ7A44 MINGW64 /e/Git-Space/demo01 (master)
    #创建别名
    $ git remote add demo01 https://github.com/007264/demo01
    
    12086@DESKTOP-VPJ7A44 MINGW64 /e/Git-Space/demo01 (master)
    #查看当前有哪些别名(fetch用来拉取,push用来推送)
    $ git remote -v
    demo01  https://github.com/007264/demo01 (fetch)
    demo01  https://github.com/007264/demo01 (push)
    
    
    
  • 推送本地仓库到远程库

    git push 别名 分支名
    
    12086@DESKTOP-VPJ7A44 MINGW64 /e/Git-Space/demo01 (master)
    #推送本地仓库到远程库
    $ git push demo01 master
    Enumerating objects: 15, done.
    Counting objects: 100% (15/15), done.
    Delta compression using up to 12 threads
    Compressing objects: 100% (10/10), done.
    Writing objects: 100% (15/15), 1.12 KiB | 573.00 KiB/s, done.
    Total 15 (delta 4), reused 0 (delta 0), pack-reused 0
    remote: Resolving deltas: 100% (4/4), done.
    To https://github.com/007264/demo01
     * [new branch]      master -> master
    
    
  • 拉取远程库到本地库

    git pull 别名 分支名称
    
    #拉取远程库到本地库
    $ git pull demo01 master
    remote: Enumerating objects: 5, done.
    remote: Counting objects: 100% (5/5), done.
    remote: Compressing objects: 100% (2/2), done.
    remote: Total 3 (delta 1), reused 0 (delta 0), pack-reused 0
    Unpacking objects: 100% (3/3), 698 bytes | 24.00 KiB/s, done.
    From https://github.com/007264/demo01
     * branch            master     -> FETCH_HEAD
       7d4553b..d0de6b3  master     -> demo01/master
    Updating 7d4553b..d0de6b3
    Fast-forward
     temp.txt | 1 +
     1 file changed, 1 insertion(+)
    
    12086@DESKTOP-VPJ7A44 MINGW64 /e/Git-Space/demo01 (master)
    #查看拉取后的文件
    $ cat temp.txt
    Hello World!
    Hello World!
    Hello World!
    Hello World!
    Hello World!
    Hello World!
    Hello World!
    Hello World!
    Hello World!
    This is master(master second version)!
    This is hot-fix!(second version)
    This is GitHub !(first version)
    
  • 克隆远程仓库到本地

    git clone 远程地址
    

    小结:

    ​ clone会做如下操作:

    ​ 1.拉取代码

    ​ 2.初始化本地仓库

    ​ 3.创建别名

  • 团队内协作

    	主要涉及到令狐冲克隆代码到本地,然后将代码push提交到GitHub,但此时会报错。需要岳不群先将令狐冲拉入到团队中,同时把邀请函网址发给令狐冲,然后令狐冲选择接受邀请,此时令狐冲就可以将代码push提交到GitHub了。之后岳不群就可以pull拉取令狐冲修改后的代码到本地了。
    
  • 跨团队协作

    	东方不败fork代码到GitHub代码仓库,修改完代码之后,发送pull request请求,岳不群收到请求之后,需要先审批一下代码,同时还可以在请求消息中进行聊天交流,确认代码可以之后,可以进行合并(merge)。
    
  • SSH免密登录(略)

六、IDEA集成Git


1、配置Git忽略文件
  • 为什么要忽略这些文件?

    与项目的实际功能无关,不参与服务器上部署运行。把它们忽略掉能够屏蔽IDE工具之间的差异。
    
  • 如何操作来忽略这些文件?

    1.创建忽略规则文件xxxx.ignore(前缀名随便起,建议就是git.ignore)

    这个文件的存放位置原则上在哪里都可以,为了便于让~/.gitconfig文件引用,建议也放在用户家目录下

    git.ingore文件模板内容

    #Compiled class file
    *.class
    
    # compile file
    *.class
    
    # log file
    *.log
    
    # BlueJ file
    *.ctxt
    
    # Mobile Tools for Java (J2ME)
    .mtj.tmp/
    
    # Package Files #
    *.jar
    *.war
    *.nar
    *.ear
    *.zip
    *.tar.gz
    *.rar
    
    # virtual machine crash logs
    hs_err_pid*
    replay_pid*
    
    # maver ignore file
    target/
    pom.xml.tag
    pom.xml.releaseBackup
    pom.xml.versionsBackup
    pom.xml.next
    release.properties
    dependency-reduced-pom.xml
    buildNumber.properties
    .mvn/timing.properties
    !/.mvn/wrapper/maven-wrapper.jar
    
    # idea environment file
    .idea/*
    .idea/compiler.xml
    .idea/encodings.xml
    .idea/modules.xml
    *.iml
    

    2.在.gitconfig文件中引用忽略配置文件(此文件在Windows的家目录中)

    [user] 
    	name = gzb
    	email= 1208644355@qq.com
    [core]
    	excludesfile = C:/用户/12086/git.ignore
    

    3.在IDEA中定位git程序

    在idea的settings中找到Git,设置Git安装路径下的git.exe并测试
    在没有问题的情况下,选择OK
    
2、在IDEA中进行Git的相关操作

七、IDEA集成GitHub


八、国内代码托管中心-码云


1、简介
	众所周知,GitHub服务器在国外,使用GitHub作为项目托管网站,如果网速不好的话,严重影响使用体验,甚至出现登录不上的情况。针对这个情况,大家可以使用国内的项目托管网站-码云。
	码云是开源中国推出的基于Git的代码托管中心,网址:https://gitss.com/,使用方式跟GitHub一样,而且他还是一个中文网站,适合英文不是很好的开发者。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值