Git学习笔记

前言

为了更好地写博客,搭建博客需要的工具也都需要了解一下。而且Git这个版本控制工具以后的学习中都能用到。

一、创建和初始化本地库

1.工作流程

一般工作流程如下:
克隆 Git 资源作为工作目录。
在克隆的资源上添加或修改文件。
如果其他人修改了,你可以更新资源。
在提交前查看修改。
提交修改。
在修改完成后,如果发现错误,可以撤回提交并再次修改并提交。

图引用自菜鸟教程:

2.了解基本概念

  • 工作区:电脑上能看到的目录,也就是我们新建的那个文件夹.
  • 暂存区:stage,或者index.存放在.git目录下的index文件中.
  • 版本库:新建文件,经过初始化产生的.git目录,是Git的版本库.
    图引用自菜鸟教程:

3.基本操作原理

  • 执行git add命令,提交到暂存区
  • 执行git commit命令,提交到版本库
  • 执行git reset HEAD命令,更改暂存区,本地文件(工作区)不受影响
  • 执行git -rm --cached ,删除暂存区文件,本地文件(工作区)不受影响
  • 执行git checkout .或者git checkout --命令,暂存区代替工作区文件.本地文件发生改变
  • 执行git checkout HEAD.或者git checkout HEAD 命令,版本库中的文件替换暂存区及工作区的文件

图引用自菜鸟教程:

小贴士:Git概念详情查阅

https://www.runoob.com/git/git-tutorial.html

1.创建文件夹(例:E:\testGit)

2.打开Git Bash(Git终端)

小贴士:按住ctrl键使用+或-去放大终端上的字体大小(固定设置字体大小:鼠标右键--》Options--》Text--》Select--》选择字号--》Apply--》Save)
小贴士:设置编码集 鼠标右键--》Options--》Text--》Characher set选择UTF-8--》Apply--》Save
验证Git是否安装完成(顺便查看下版本信息):git --version
基本命令(与Linux上操作一样):
clear 清屏

3.设置签名

设置用户名和邮箱

$ git config --global user.name " 你的用户名"
$ git config --global user.email "你的邮箱"

配置后使用命令

git config --list

查看当前git配置信息

如要修改git配置文件,可使用命令

git config -e --global

小贴士::--global针对系统所有仓库,去掉只针对当前仓库.

4.本地仓库的初始化操作

使用命令进入到你创建的文件夹内(例:E:\testGit)

$ cd e:
$ cd testGit

或者在资源管理器中创建的文件夹内鼠标右键,打开Git Bash
初始化命令

$ git init

5.查看目录命令

$ ll -la  //查看包括隐藏的文件,.git文件是隐藏文件(windows查看隐藏文件)

小贴士: config 配置文件

二、提交文件

add和commit命令,提交文件到暂存区和本地库(这样才能对文件进行后续管理)
小贴士:再提交代码时要先设置提交的用户信息,如一开始的配置

1. 在本地仓库文件夹中创建一个文件 (例:test.txt)

2. 将文件提交到暂存区

先打开Git Bash终端输入命令:

$ git add "Demo1.txt" 

3. 将暂存区文件提交到本地库

打开Git Bash终端输入命令:

 $ git commit -m "这是我提交的第一个文件" "Demo1.txt" 
 $ git commit -m "第一次提交文件" "Demo1.txt"

使用-a参数,设置修改文件后不需要执行git add命令,直接提交

git commit -a

小贴士: 参数:m:message “”中的是注释,方便以后管理
小贴士: 提交文件时可不用双引号把文件名括起来

自己练习一下!

三、查看缓冲区和本地库状态的命令:

$ git status

说明:
nothing to commit 说明暂存区是空的(在本地库中放入一个文件)

Untracked files: 没有进行文件追踪,说明存在在本地库文件夹中有尚未被提交到暂存区的文件(使用add命令将其添加到暂存区)

Changes to be committed: 文件可以被提交(使用commit命令,将文件提交到本地库)

0 insertions(+) ,0 deletions(-) 0行增加 ,0行删除
修改文件内容后,再次查看状态

modified 文件已经修改了(可将已经修改的重新提交到暂存区和本地库)
通常我们使用-s参数获得简短的输出结果

git status -s

小贴士::AM状态表示添加到缓存后本地又有改动.

小贴士:在工作区(本地库文件夹)中还没有被提交到暂存区的状态:untrack
通过add命令提交到暂存区,就是将文件加入到index中,状态变为:staged
通过commit命令可以将staged状态的文件加入到本地库的HEAD中

四、查看日志

$ git log

commit eb5579cf745b6c68e6480f2fc19481bf9452f219 (HEAD -> master)

commit 后的十六进制代码 可以看成键值对的索引,就是<key,value>中的key,key:索引,value:历史记录中的具体内容。通过索引可以找到历史记录中的具体内容。
小贴士: 历史版本由近至远
小贴士: 当历史记录太多时,出现 ”:“进行分页,在”:“后通过空格回车可切换到下一页
小贴士:
下一页:空格
上一页:b
到尾页显示END
退出:q

日志展示方式

  • 以一种美观的方式,将其在一行上展示出来

     $ git log --pretty=oneline
    
  • 显示一部分索引,将其在一行上展示出来
    $ git log --oneline

  • 显示指针回溯到相应的历史版本需要的步数

     $ git reflog
    

五、前进、后退历史版本的命令

工作区,缓存区,版本库都发生改变
1.--hard参数
全部文件

$ git reset --hard  【你所要跳到历史版本的索引】// 就是前面说的很长的一窜十六进制的数

git reset --hard HEAD^ #所有内容退回到上一个版本,并删除掉回退点之前的所有信息

指定文件

git reset --hard^ <file> 

注意:谨慎使用 –hard 参数,它会删除回退点之前的所有信息。

HEAD 说明:

HEAD 表示当前版本

HEAD^ 上一个版本

HEAD^^ 上上一个版本

HEAD^^^ 上上上一个版本

以此类推...

可以使用 ~数字表示
HEAD~0 表示当前版本

HEAD~1 上一个版本

小贴士:是指针名
小贴士:复制,在终端选中就是复制。粘贴,右键鼠标点击past。

小贴士:使用hard参数回溯历史版本时,本地库和暂存区已经本地存储的文件同步更改。

本地库(HEAD)的指针移动时,重置暂存区(index)、重置工作区(一开始初始化创建的文件夹)

  1. --mixed参数
    默认参数,可以不带,工作区不变,缓冲区与版本库改变
git reset [HEAD] [FILE]
$ git reset --mixed 【索引】

本地库(HEAD)指针移动的同时,重置暂存区(index),但是工作区(初始化时的文件夹)不动
3.--soft参数
缓存区发生改变,工作区与版本库不变
小贴士:mixed参数不常用

$ git reset --soft 【索引】

本地库(HEAD)指针移动的时候,暂存区(index)和工作区(初始化的文件夹)都不动
小贴士:参数不常用

六、删除操作

删除工作区中的文件

$ rm 【文件名】

将删除操作同步到暂存区

$ git add 【文件名】

将删除操作同步到本地库

$ git commit 【文件名】

小贴士: 该删除不是物理删除,只是改变了指针指向
找回本地库中删除的文件

$ git reset --hard 【索引】

实际上就是将历史版本切换到添加文件时的版本
找回暂存区的文件

$ git reset --hard 【索引】

七、文件对比差异

文件对比差异,比较的是文件在缓冲区和工作区的差异

  • 尚未缓存的改动:git diff
  • 查看已缓存的改动: git diff --cached
  • 查看已缓存的与未缓存的所有改动:git diff HEAD
  • 显示摘要而非整个 diff:git diff --stat

小贴士:git status 显示你上次提交更新后的更改或者写入缓存的改动, 而 git diff 一行一行地显示这些改动具体是啥。

1.在工作区创建一个文件(例:TEST.txt),将其提交的暂存区和本地库中

2.更改工作区内的文件(TEST.txt),增加文件内容,导致工作区和暂存区文件不同步

小贴士:Git是以行为单位进行管理
将工作区和暂存区文件进行比较的命令:

$ git  diff 【文件名】

多个文件的比对命令:

$ git diff // 比较工作区和暂存区中所有文件的差异

比较暂存区和本地库的差异

$ git diff HEAD 【文件名】 // 比较暂存区和当前本地库中该文件的差异
$ git diff HEAD 【索引号】【文件名 】// 比较暂存区和历史本地库中该文件的差异

八、查看、创建、切换分支

概念
branch master主分支
branch分支
新的独立的功能,开辟新的分支branch,从master主分支上复制当前最新的版本到分支上。
小贴士:多个分支可以并行开发,各个分支互不影响
分支的合并
hot_fix 热修复(分支合并出现bug后新开辟的分支)

操作

  • 查看当前版本下的所有分支
$ git branch -v 
  • 创建分支
$ git branch 【分支名】

小贴士::分支名前面的*表示当前所在的分支

  • 切换分支
$ git checkout 【分支名】

小贴士:创建的新分支和当前主分支上最新版本索引号相同

查看文件内容命令:

$ cat 【文件名】

九、合并分支

将其他分支合并到主分支

  • 切换到主分支
$ git checkout master
  • 将分支合并到主分支
  $ git merge 【分支名】

小贴士:master|MERGING代表储在合并状态中

Merge conflict in 文件名 代表出现冲突
出现冲突的原因:在同一个文件的同一个位置修改
保留下需要的,进行修改后
将工作区中的内容添加到暂存区
进行commit操作

$ git commit -m "解决了冲突问题" Demo1.txt

小贴士:不能带文件名,否则出错

十、为仓库地址起别名(testRepository)

$ git remote -v 查看远程库的别名
$ git remote add 别名 Github仓库的地址

小贴士:fetch可以从仓库取回东西,push可以推送东西

十一、推送命令:

$ git push 【别名】 master【要推送的分支名】

十二、克隆

选取下载到的盘符(下载到地址)
拉取命令:

$ git clone 远程库的地址

克隆操作可以帮我们完成

  • 初始化本地库
  • 将远程库内容完整克隆到本地库别名

十三、邀请加入团队

使用push命令没有让输入密码也没有报错,push成功的原因是Git bash里有缓存
删除缓存:搜索管理你的凭据
邀请加入团队
进入远程库后点击Settings在Manage access里邀请普通成员
输入邀请人的github账户名
Pending Invite就是邀请连接
接受邀请输入,邀请连接

十四、远程库的修改和拉取操作

1.拉取pull操作的命令:相当于fetch+merge

2.项目经理先确定远程库内容是否更新了

3.项目经理进行拉取操作:

抓取操作

$ git fetch 【远程库别名或远程库地址】【分支名】

抓取后切换到远程库中的内容是否正确

$ git checkout 【远程仓库别名】/【分支名】

ll 查看目录
cat 【文件名】查看文件内容

发现内容都正确,进行合并操作
切换回本地库的主分支

$ git checkout master

合并分支

$ git merge 【远程库别名】/【分支名】

小贴士:fetch操作只是将远程仓库里的东西下载到本地,并没有更新到工作区,工作区文件不变

直接pull拉取
远程库已经更新后

$ git pull 【远程仓库别名】【分支名】

小贴士:fetch+merge 为了保险,pull代码简单

十五、跨团队合作

1.得到远程库的地址

2.fork操作

复制地址,点击fork操作

3.克隆到本地,进行修改

$ git clone 【地址】

4.添加到暂存区,提交到本地库,推送到远程库

5.进行pull request操作

点击Pull requests

6.审核

查看请求点击pull requests
Files changed 可以查看具体提交的内容
点击Merge pull request 进行合并

十六、跨团队合作

1.得到远程库的地址

2.fork操作

复制地址,点击fork操作

3.克隆到本地,进行修改

$ git clone 【地址】

4.添加到暂存区,提交到本地库,推送到远程库

5.进行pull request操作

点击Pull requests

6.审核

查看请求点击pull requests
Files changed 可以查看具体提交的内容
点击Merge pull request 进行合并

十七、SSH免密登录

(如果操作系统不是windows10)push每次需要输入账户和密码
免密操作

1.进入到用户的主目录中的命令:

$ cd ~

2.执行命令生成一个.ssh的目录

$ ssh-keygen -t rsa -C 【github对应的账户】

三次确认回车,使用默认设置
小贴士: C要大写
在.ssh目录下有两个文件id_rsa和id_rsa.pub,打开id_rsa.pub文件,将里面的内容进行复制操作

3.打开github 在头像位置找到Settings --》SSH and GPG keys --》创建型的SSH keys,将复制的内容粘贴到key中

4.生成密钥以后就可以正常进行push操作

5.添加别名的命令

$ git remote add 【别名】 【远程库SSH协议下的地址】

十八、IDEA集成Git

创建project后,打开File点击Settings选择Git,设置git的安装路径
Path to Git executable:D:\study_setup\Git\bin\git.exe
Apply --》OK

1.本地库的初始化操作

VCS选择Import into Version Control选择Create Git Repository
本地库初始化完成,生成了.git文件

2.在创建好的project中创建New Modul创建Package创建Class然后进行Java代码的书写

3.在git中add添加到暂存区点击commit提交到本地库(可添加注释)Version control相当终端 Log日志

十九、使用idea拉取推送资源

拉取

$ git pull 【别名】 【分支名】--allow-unrelated-histories

允许无联系的版本合并
小贴士:不同本地库需要再次设置别名
推送

$ git push -u 【别名】【分支名】-f

远程库和本地库已经可以进行交互了
直接commit和push(不推荐)
为了防止冲突,一般都是先pull后push

二十、使用idea克隆远程仓库到本地

利用IDEA进行克隆项目
new--》 Progect from Version Control--》Git
URL:远程库地址
Directory:放置位置
Test测试与远程库是否能连接上
Open Project 选择New Window选择在新窗口打开
小贴士:克隆到本地后,这个目录即变成了一个本地仓库又变成了工作区间

二十一、使用idea解决冲突

1.制造冲突

2.A和B对同一个文件的同一个位置进行修改

3.解决冲突

出现冲突后,提示进行merge操作,点击merge进行合并(可选择合并的内容)

4.避免冲突

团队开发时避免在一个文件中改代码
在修改一个文件之前,在push之前先pull操作,在别人的基础上进行修改

posted @ 2020-12-01 13:20  云雨归海  阅读(103)  评论(0编辑  收藏  举报