Git笔记

目录

1、Git概述

1.1、Git工作机制

1.2、Git 和代码托管中心

2、Git常用命令      

2.1、设置用户签名

2.2、初始化本地库

2.3、查看本地库状态

2.4 添加暂存区

2.5 提交到本地库

2.6 历史版本

2.6.1 查看历史版本

2.6.2 版本穿梭

 3、Git分支操作

3.1、什么是分支 

3.2、 分支的好处    

3.3、分支的操作

3.3.1、查看分支

3.3.2、创建分支

3.3.3、修改分支

3.3.4、切换分支

3.3.5、合并分支

3.3.6、产生冲突

3.3.7 解决冲突

3.4、创建分支和切换分支图解

4、Git团队协作机制

4.1 团队内协作

4.2 跨团队协作 

5、 Github操作

5.1、远程仓库操作

5.1.1、创建远程仓库别名

5.1.2 推送本地分支到远程仓库

5.1.3  克隆远程仓库到本地

5.2、拉取远程库内容

6、IDEA集成Git

6.1、配置Git忽略文件

6.2、定位Git程序

6.3、初始化本地库 

6.4、添加到暂存区、提交到本地库

6.5、切换版本

6.6、创建分支 

6.7、切换分支 

6.8、合并分支

7、Github

7.1、分享到GitHub

7.2、push、pull操作

7.3、拉取远程库代码到本地库

​7.4、clone远程库


1、Git概述

        Git 是一个免费的、开源的 分布式版本控制系统 ,可以快速高效地处理从小型到大型的各种
项目。
        Git 易于学习,占地面积小,性能极快。 它具有廉价的本地库,方便的暂存区域和多个工作
流分支等特性。其性能优于 Subversion CVS Perforce ClearCase 等版本控制工具。

1.1、Git工作机制

1.2、Git 和代码托管中心

        代码托管中心是基于网络服务器的远程代码仓库,一般我们简单称为 远程库
局域网
        ✓ GitLab
互联网
        ✓ GitHub (外网)
        ✓ Gitee 码云(国内网站)

2、Git常用命令      

命令名称作用
git config --global user.name 用户名
设置用户签名
git config --global user.email 邮箱
设置用户邮箱
git init初始化本地库
git status查看本地库状态
git add 文件名添加到暂存区
git commit -m "日志信息" 文件名提交到本地库
git reflog

查看历史信息

git reset --hard 版本号版本穿梭

2.1、设置用户签名

        1)  基本语法

        git config --global user.name 用户名

        git config --global user.email 邮箱

        2)实操案例

        全局范围的签名设置:
        Layne@LAPTOP-Layne MINGW64 /d/Git-Space/SH0720 (master)
        $ git config --global user.name Layne
        Layne@LAPTOP-Layne MINGW64 /d/Git-Space/SH0720 (master)
        $ git config --global user.email Layne@atguigu.com
        Layne@LAPTOP-Layne MINGW64 /d/Git-Space/SH0720 (master)
        $ cat ~/.gitconfig
        [user]
        name = Layne
        email = Layne@atguigu.com
        
        或者可以直接进入.git文件中的config文件里,直接更改[user]
        
说明:
        签名的作用是区分不同操作者身份。用户的签名信息在每一个版本的提交信息中能够看
到,以此确认本次提交是谁做的。 Git 首次安装必须设置一下用户签名,否则无法提交代码。
※注意: 这里设置用户签名和将来登录 GitHub (或其他代码托管中心)的账号没有任
何关系。

2.2、初始化本地库

1 )基本语法
        git init
2 )案例实操
        Layne@LAPTOP-Layne MINGW64 /d/Git-Space/SH0720
        $ git init
        Initialized empty Git repository in D:/Git-Space/SH0720/.git/
        Layne@LAPTOP-Layne MINGW64 /d/Git-Space/SH0720 (master)
        $ ll -a
        total 4
        drwxr-xr-x 1 Layne 197609 0 11 月 25 14:07 . /
        drwxr-xr-x 1 Layne 197609 0 11 月 25 14:07 .. /
        drwxr-xr-x 1 Layne 197609 0 11 月 25 14:07 .git / .git 初始化的效
        果,生成 git
3 )结果查看
        查看文件夹中是否有.git文件 
        

        

2.3、查看本地库状态

        1)基本语法

        git status        

        2)案例实操
        首次查看(工作区没有任何文件)
        Layne@LAPTOP-Layne MINGW64 /d/Git-Space/SH0720 (master)
        $ git status
        On branch master
        No commits yet
        nothing to commit (create/copy files and use "git add" to track)
     
        新增文件(hello.txt
        Layne@LAPTOP-Layne MINGW64 /d/Git-Space/SH0720 (master)
        $ vim hello.txt
        hello git! hello atguigu!
        hello git! hello atguigu!
        hello git! hello atguigu!
   
        再次查看(检测到未追踪的文件)
        Layne@LAPTOP-Layne MINGW64 /d/Git-Space/SH0720 (master)
        $ git status
        On branch master
        No commits yet
        Untracked files:
        (use "git add <file>..." to include in what will be committed)
        hello.txt
        nothing added to commit but untracked files present (use "git add"
        to track)

2.4 添加暂存区

将工作区的文件添加到暂存区
1 )基本语法
git add 文件名
2 )案例实操
Layne@LAPTOP-Layne MINGW64 /d/Git-Space/SH0720 (master)
$ git add hello.txt
warning: LF will be replaced by CRLF in hello.txt.
The file will have its original line endings in your working
directory.
查看状态(检测到暂存区有新文件)
Layne@LAPTOP-Layne MINGW64 /d/Git-Space/SH0720 (master)
$ git status
On branch master
No commits yet
Changes to be committed:
(use "git rm --cached <file>..." to unstage)
new file: hello.txt

2.5 提交到本地库

将暂存区的文件提交到本地库
1 )基本语法
git commit -m " 日志信息 " 文件名
2 )案例实操
Layne@LAPTOP-Layne MINGW64 /d/Git-Space/SH0720 (master)
$ git commit -m "my first commit" hello.txt
warning: LF will be replaced by CRLF in hello.txt.
The file will have its original line endings in your working
directory.
[master (root-commit) 86366fa] my first commit
1 file changed, 16 insertions(+)
create mode 100644 hello.txt
3) 查看状态(没有文件需要提交)
Layne@LAPTOP-Layne MINGW64 /d/Git-Space/SH0720 (master)
$ git status
On branch master
nothing to commit, working tree clean

修改文件(hello.txt)

Layne@LAPTOP-Layne MINGW64 /d/Git-Space/SH0720 (master)
$ vim hello.txt
hello git! hello atguigu! 2222222222222
hello git! hello atguigu!
hello git! hello atguigu!
查看状态(检测到工作区有文件被修改)
Layne@LAPTOP-Layne MINGW64 /d/Git-Space/SH0720 (master)
$ git status
On branch master
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working
directory)
modified: hello.txt
no changes added to commit (use "git add" and/or "git commit -a")
将修改的文件再次添加暂存区
Layne@LAPTOP-Layne MINGW64 /d/Git-Space/SH0720 (master)
$ git add hello.txt
warning: LF will be replaced by CRLF in hello.txt.
The file will have its original line endings in your working
directory.
查看状态(工作区的修改添加到了暂存区)
Layne@LAPTOP-Layne MINGW64 /d/Git-Space/SH0720 (master)
$ git status
On branch master
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
modified: hello.txt

2.6 历史版本

2.6.1 查看历史版本

1 )基本语法
git reflog 查看版本信息
git log 查看版本详细信息
2 )案例实操
Layne@LAPTOP-Layne MINGW64 /d/Git-Space/SH0720 (master)
$ git reflog
087a1a7 ( HEAD -> master ) HEAD@{0}: commit: my third commit
ca8ded6 HEAD@{1}: commit: my second commit
86366fa HEAD@{2}: commit (initial): my first commit

2.6.2 版本穿梭

1 )基本语法
git reset --hard 版本号
2 )案例实操
-- 首先查看当前的历史记录,可以看到当前是在 087a1a7 这个版本
Layne@LAPTOP-Layne MINGW64 /d/Git-Space/SH0720 (master)
$ git reflog
087a1a7 (HEAD -> master) HEAD@{0}: commit: my third commit
ca8ded6 HEAD@{1}: commit: my second commit
86366fa HEAD@{2}: commit (initial): my first commit
-- 切换到 86366fa 版本,也就是我们第一次提交的版本
Layne@LAPTOP-Layne MINGW64 /d/Git-Space/SH0720 (master)
$ git reset --hard 86366fa
HEAD is now at 86366fa my first commit
-- 切换完毕之后再查看历史记录,当前成功切换到了 86366fa 版本
Layne@LAPTOP-Layne MINGW64 /d/Git-Space/SH0720 (master)
$ git reflog
86366fa (HEAD -> master) HEAD@{0}: reset: moving to 86366fa
087a1a7 HEAD@{1}: commit: my third commit
ca8ded6 HEAD@{2}: commit: my second commit
86366fa (HEAD -> master) HEAD@{3}: commit (initial): my first commit
-- 然后查看文件 hello.txt ,发现文件内容已经变化
$ cat hello.txt
hello git! hello atguigu!
hello git! hello atguigu!
hello git! hello atguigu!
hello git! hello atguigu!
hello git! hello atguigu!
hello git! hello atguigu!
hello git! hello atguigu!
Git 切换版本,底层其实是移动的 HEAD 指针,具体原理如下图所示。

 3、Git分支操作

3.1、什么是分支 

        在版本控制过程中,同时推进多个任务,为每个任务,我们就可以创建每个任务的单独
分支。使用分支意味着程序员可以把自己的工作从开发主线上分离开来,开发自己分支的时
候,不会影响主线分支的运行。对于初学者而言,分支可以简单理解为副本,一个分支就是
一个单独的副本。(分支底层其实也是指针的引用)

3.2、 分支的好处    

        同时并行推进多个功能开发,提高开发效率。
各个分支在开发过程中,如果某一个分支开发失败,不会对其他分支有任何影响。失败
的分支删除重新开始即可。

3.3、分支的操作

        

命令名称作用
git branch 分支名创建分支
git branch -v查看分支
git checkout 分支名切换分支
git merge 分支名把指定的分支合并到当前分支上

3.3.1、查看分支

1 )基本语法
git branch -v
2 )案例实操
Layne@LAPTOP-Layne MINGW64 /d/Git-Space/SH0720 (master)
$ git branch -v
* master 087a1a7 my third commit * 代表当前所在的分区)

3.3.2、创建分支

1 )基本语法
git branch 分支名
2 )案例实操
Layne@LAPTOP-Layne MINGW64 /d/Git-Space/SH0720 (master)
$ git branch hot-fix
Layne@LAPTOP-Layne MINGW64 /d/Git-Space/SH0720 (master)
$ git branch -v
hot-fix 087a1a7 my third commit (刚创建的新的分支,并将主分支 master
的内容复制了一份)
* master 087a1a7 my third commit

3.3.3、修改分支

-- maste 分支上做修改
Layne@LAPTOP-Layne MINGW64 /d/Git-Space/SH0720 (master)
$ vim hello.txt
-- 添加暂存区
Layne@LAPTOP-Layne MINGW64 /d/Git-Space/SH0720 (master)
$ git add hello.txt
-- 提交本地库
Layne@LAPTOP-Layne MINGW64 /d/Git-Space/SH0720 (master)
$ git commit -m "my forth commit" hello.txt
[master f363b4c] my forth commit
1 file changed, 1 insertion(+), 1 deletion(-)
-- 查看分支
Layne@LAPTOP-Layne MINGW64 /d/Git-Space/SH0720 (master)
$ git branch -v
hot-fix 087a1a7 my third commit hot-fix 分支并未做任何改变)
* master f363b4c my forth commit (当前 master 分支已更新为最新一次提交
的版本)
-- 查看 master 分支上的文件内容
Layne@LAPTOP-Layne MINGW64 /d/Git-Space/SH0720 (master)
$ cat hello.txt
hello git! hello atguigu! 2222222222222
hello git! hello atguigu! 3333333333333
hello git! hello atguigu!
hello git! hello atguigu!

3.3.4、切换分支

1 )基本语法
git checkout 分支名
2 )案例实操
Layne@LAPTOP-Layne MINGW64 /d/Git-Space/SH0720 (master)
$ git checkout hot-fix
Switched to branch 'hot-fix'
-- 发现当先分支已由 master 改为 hot-fix
Layne@LAPTOP-Layne MINGW64 /d/Git-Space/SH0720 (hot-fix)
$
-- 查看 hot-fix 分支上的文件内容发现与 master 分支上的内容不同
Layne@LAPTOP-Layne MINGW64 /d/Git-Space/SH0720 (hot-fix)
$ cat hello.txt
hello git! hello atguigu! 2222222222222
hello git! hello atguigu! 3333333333333
hello git! hello atguigu!
hello git! hello atguigu!
-- hot-fix 分支上做修改
Layne@LAPTOP-Layne MINGW64 /d/Git-Space/SH0720 (hot-fix)
$ cat hello.txt
hello git! hello atguigu! 2222222222222
hello git! hello atguigu! 3333333333333
hello git! hello atguigu!
hello git! hello atguigu!
hello git! hello atguigu!
hello git! hello atguigu!
-- 添加暂存区
Layne@LAPTOP-Layne MINGW64 /d/Git-Space/SH0720 (hot-fix)
$ git add hello.txt
-- 提交本地库
Layne@LAPTOP-Layne MINGW64 /d/Git-Space/SH0720 (hot-fix)
$ git commit -m "hot-fix commit" hello.txt

3.3.5、合并分支

1 )基本语法
git merge 分支名
2 )案例实操 在 master 分支上合并 hot-fix 分支
Layne@LAPTOP-Layne MINGW64 /d/Git-Space/SH0720 ( master )
$ git merge hot-fix
Auto-merging hello.txt
CONFLICT (content): Merge conflict in hello.txt
Automatic merge failed; fix conflicts and then commit the result.

3.3.6、产生冲突

冲突产生的表现:后面状态为 MERGING
Layne@LAPTOP-Layne MINGW64 /d/Git-Space/SH0720 ( master|MERGING )
$ cat hello.txt
hello git! hello atguigu! 2222222222222
hello git! hello atguigu! 3333333333333
hello git! hello atguigu!
hello git! hello atguigu!
hello git! hello atguigu!
hello git! hello atguigu!
hello git! hello atguigu!
hello git! hello atguigu!
hello git! hello atguigu!
hello git! hello atguigu!
hello git! hello atguigu!
hello git! hello atguigu!
hello git! hello atguigu!
hello git! hello atguigu!
<<<<<<< HEAD
hello git! hello atguigu! master test
hello git! hello atguigu!
=======
hello git! hello atguigu!
hello git! hello atguigu! hot-fix test
>>>>>>> hot-fix
冲突产生的原因:
合并分支时,两个分支在 同一个文件的同一个位置 有两套完全不同的修改。 Git 无法替
我们决定使用哪一个。必须 人为决定 新代码内容。
查看状态(检测到有文件有两处修改)
Layne@LAPTOP-Layne MINGW64 /d/Git-Space/SH0720 ( 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: hello.txt
no changes added to commit (use "git add" and/or "git commit -a")

3.3.7 解决冲突

1 )编辑有冲突的文件,删除特殊符号,决定要使用的内容
特殊符号: <<<<<<< HEAD 当前分支的代码 ======= 合并过来的代码 >>>>>>> hot-fix
hello git! hello atguigu! 2222222222222
hello git! hello atguigu! 3333333333333
hello git! hello atguigu!
hello git! hello atguigu!
hello git! hello atguigu!
hello git! hello atguigu!
hello git! hello atguigu!
hello git! hello atguigu!
hello git! hello atguigu!
hello git! hello atguigu!
hello git! hello atguigu!
hello git! hello atguigu!
hello git! hello atguigu!
hello git! hello atguigu!
hello git! hello atguigu! master test
hello git! hello atguigu! hot-fix test
2 )添加到暂存区
Layne@LAPTOP-Layne MINGW64 /d/Git-Space/SH0720 (master|MERGING)
$ git add hello.txt
3 )执行提交(注意:此时使用 git commit 命令时 不能带文件名
Layne@LAPTOP-Layne MINGW64 /d/Git-Space/SH0720 (master|MERGING)
$ git commit -m "merge hot-fix"
[master 69ff88d] merge hot-fix
-- 发现后面 MERGING 消失,变为正常
Layne@LAPTOP-Layne MINGW64 /d/Git-Space/SH0720 (master)
$

3.4、创建分支和切换分支图解

        

        master、 hot-fix 其实都是指向具体版本记录的指针。当前所在的分支,其实是由 HEAD
决定的。所以创建分支的本质就是多创建一个指针。
        HEAD 如果指向 master ,那么我们现在就在 master 分支上。
        HEAD 如果执行 hotfix ,那么我们现在就在 hotfix 分支上。

4、Git团队协作机制

4.1 团队内协作

4.2 跨团队协作 

5、 Github操作

5.1、远程仓库操作

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

5.1.1、创建远程仓库别名

1 )基本语法
git remote -v 查看当前所有远程地址别名
git remote add 别名 远程地址
2 )案例实操
Layne@LAPTOP-Layne MINGW64 /d/Git-Space/SH0720 (master)
$ git remote -v
Layne@LAPTOP-Layne MINGW64 /d/Git-Space/SH0720 (master)
$ git remote add ori https://github.com/atguiguyueyue/git-shTest.git
Layne@LAPTOP-Layne MINGW64 /d/Git-Space/SH0720 (master)
$ git remote -v
ori https://github.com/atguiguyueyue/git-shTest.git (fetch)
ori https://github.com/atguiguyueyue/git-shTest.git (push)

5.1.2 推送本地分支到远程仓库

1 )基本语法
git push 别名 分支
2 )案例实操
Layne@LAPTOP-Layne MINGW64 /d/Git-Space/SH0720 (master)
$ git push ori master
Logon failed, use ctrl+c to cancel basic credential prompt.
Username for 'https://github.com': atguiguyueyue
Counting objects: 3, done.
Delta compression using up to 12 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 276 bytes | 276.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To https://github.com/atguiguyueyue/git-shTest.git
* [new branch] master -> master
此时发现已将我们 master 分支上的内容推送到 GitHub 创建的远程仓库。

 

5.1.3  克隆远程仓库到本地

1 )基本语法
git clone 远程地址
2 )案例实操
Layne@LAPTOP-Layne MINGW64 /d/Git-Space/pro-linghuchong
$ git clone https://github.com/atguiguyueyue/git-shTest.git
Cloning into 'git-shTest'...
remote: Enumerating objects: 3, done.
remote: Counting objects: 100% (3/3), done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 3 (delta 0), reused 3 (delta 0), pack-reused 0
Unpacking objects: 100% (3/3), done.
https://github.com/atguiguyueyue/git-shTest.git
这个地址为远程仓库地址,克隆结果:初始化本地仓库
-- 创建远程仓库别名
Layne@LAPTOP-Layne MINGW64 /d/Git-Space/pro-linghuchong/git-shTest
(master)
$ git remote -v
origin https://github.com/atguiguyueyue/git-shTest.git (fetch)
origin https://github.com/atguiguyueyue/git-shTest.git (push)
小结: clone 会做如下操作。 1 、拉取代码。 2 、初始化本地仓库。 3 、创建别名

5.2、拉取远程库内容

1 )基本语法
git pull 远程库地址别名 远程分支名
2 )案例实操
-- 将远程仓库对于分支最新内容拉下来后与当前本地分支直接合并
Layne@LAPTOP-Layne MINGW64 /d/Git-Space/SH0720 (master)
$ git pull ori master
remote: Enumerating objects: 5, done.
remote: Counting objects: 100% (5/5), done.
remote: Compressing objects: 100% (1/1), done.
remote: Total 3 (delta 1), reused 3 (delta 1), pack-reused 0
Unpacking objects: 100% (3/3), done.
From https://github.com/atguiguyueyue/git-shTest
* branch master -> FETCH_HEAD
7cb4d02..5dabe6b master -> ori/master
Updating 7cb4d02..5dabe6b
Fast-forward
hello.txt | 2 + -
1 file changed, 1 insertion(+), 1 deletion(-)
Layne@LAPTOP-Layne MINGW64 /d/Git-Space/SH0720 (master)
$ cat hello.txt
hello git! hello atguigu! 2222222222222
hello git! hello atguigu! 33333333333333
hello git! hello atguigu!
hello git! hello atguigu!
hello git! hello atguigu! 我是最帅的,比岳不群还帅
hello git! hello atguigu!
hello git! hello atguigu!

6、IDEA集成Git

6.1、配置Git忽略文件

6.2、定位Git程序

6.3、初始化本地库 

6.4、添加到暂存区、提交到本地库

Add添加到暂存区、Commit Directory提交到本地库

6.5、切换版本

6.6、创建分支 

6.7、切换分支 

6.8、合并分支

7、Github

7.1、分享到GitHub

7.2、push、pull操作

7.3、拉取远程库代码到本地库


7.4、clone远程库

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值