资讯详情

【笔记】Git及Github使用

Git概述及安装

Git常用命令

设置用户签名(姓名和邮箱地址)

“~/.gitconfig”

本地库的初始化

检查当地仓库的状态

将当地文件添加到暂存区

提交本地库,形成历史版

修改文件

历史版信息

穿梭版(回顾历史版)

查看当前本地库中所有文件

Git分支操作

创建分支

合并分支

解决冲突的过程

压缩历史(改变历史)

团队协作

团队内协作

跨团队协作

github使用前准备

设置SSH Key

添加公共密钥

创建仓库(Repository)

github操作

本地库代码推送到远程库(push)

pull

clone

加入团队

pull request

IDEA 集成 Git

配置 Git 忽略文件

定位 Git 程序

切换版本

分支操作

IDEA集成github


参考:尚硅谷Git从入门到精通全套教程(涵盖全套教程)GitHub\Gitee码云\GitLab)_哔哩哔哩_bilibili

《GitHub入门与实践》 ——大塚弘记

课程内容:

Git概述及安装

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

集中式版本控制工具 :CVS、SVN(Subversion)、VSS……

集中版本控制系统,如 CVS、SVN 等等,有一个单一的集中管理服务器,保存所有文件的修改版本,合作人员通过客户连接到服务器,取出最新文件或提交更新。

每个人都可以在一定程度上看到项目中其他人在做什么。管理员也可以很容易地控制每个开发者的权限,并管理一个集中的版本控制系统,这比在每个客户端上维护本地数据库要容易得多。

缺点是中央服务器的单点故障。如果服务器停机一小时,没有人能在此小时内提交更新,也没有人能合作。

像 Git 在这种分布式版本控制工具中,客户端提取的不是最新版本的文件快照,而是完全镜像代码仓库(本地仓库)。这样,任何协同工作的文件都可以在事后用其他客户端的本地仓库进行恢复。因为每个客户端的每个文件提取操作实际上都是整个文件仓库的完整备份。

分布式是指每个人都有自己的历史记录,而集中式只是集中式服务器上每个人的记录

  • 工作区:存储本地代码的位置,存储本地代码
  • 临时存储区:临时存储,可在工作区添加代码(add)到暂存区
  • 本地库:提交临存区代码(commit)到本地库后,将生成历史版

工作区和临时存储区的代码可以删除,没有历史记录和历史版本

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

可以使用push将本地库代码推送到远程库

Git常用命令

设置用户签名(姓名和邮箱地址)

设置用户签名:签名的作用是区分不同操作者身份。用户的签名信息在每一个版本的提交信息中能够看到,以此确认本次提交是谁做的。Git 首次安装必须设置用户签名,否则无法提交代码。

想要更改这些信息时,可以直接编辑设置文件~/.gitconfig。此处设置的姓名和邮箱地址将用于Git在提交日志中。GitHub上公开仓库时,这里的姓名和邮箱地址也会随提交日志一起公开,请不要使用不方便公开的隐私信息。

“~/.gitconfig”

git config --global color.ui auto

将color.ui设置为auto使命令输出具有更高的可读性。.gitconfig以下一行将被添加到中间。

本地库的初始化

git init

让git获得目录管理权。

建议从需要操作的目录中直接进入git bash

此时在文件夹下可以看到.git文件夹(可能隐藏),文件不能随意修改

注:git bash命令是和linux通用的

.git管理当前目录内容所需的仓库数据存储在目录中。Git我们称此目录为附属于仓库的工作树。

检查当地仓库的状态

git status

在main分支下,当前没有提交(空)

vim hello.txt
// i 进入编辑模式
// Esc后 yy是复制,p粘贴
// :wq保存退出

使用cat 文件名可以在bash中查看当前工作区存在的文件

未追踪的文件

可以使用git add追踪(添加到暂存区) (use "git add <file>..." to include in what will be committed)

本地文件添加到暂存区

git add hello.txt

git默认转换了换行符

此时文件存在于工作区&暂存区。是可以删除且不显示历史版本的 (use "git rm --cached <file>..." to unstage)

只删除了暂存区的,工作区依然存在

如果不改变暂存区的文件,只把工作区文件删除:

git会记录操作历史,可以用git restore xx恢复文件或手动将其从缓存区删除

提交本地库,形成历史版本

git commit命令可以将当前暂存区中的文件实际保存到仓库的历史记录中。

git commit -m "版本日志" 文件名

fd66e69是版本号

刚才我们只简洁地记述了一行提交信息,如果想要记述得,请,直接执行git commit命令。执行后编辑器就会启动,并显示如下结果。

在编辑器中记述提交信息的格式如下。

  • 第一行:用一行文字简述提交的更改内容
  • 第二行:空行
  • 第三行以后:记述更改的原因和详细内容

中止提交:如果在编辑器启动后想中止提交,请将提交信息留空并直接关闭编辑器,随后提交就会被中止。


当文件夹中所有文件都提交到本地库后:

git reflog

指针指向第二个版本

git log

详细日志不仅可以看到不同版本,还能看到是谁提交的(显示用户签名),此时显示的版本号是完整的版本号

修改文件

模拟企业中版本和代码的迭代

修改文件后查看状态,可以看到修改记录,但此次修改还未加入暂存区

git是按行维护文件的,修改了其中的一行就会显示一行被修改(把修改之前的删掉,插入修改之后的)

历史版本信息

git reflog //查看版本信息(显示的版本号是精简版的)
git log //查看版本详细信息(显示完整版本号)
git log --pretty=short //仅显示第一行简述信息
git log --graph //可视化显示版本信息

只要在git log命令后加上目录名,便会只显示该目录下的日志。如果加的是文件名,就会只显示与该文件相关的日志。

  • git log命令只能查看以当前状态为终点的历史日志
  • git reflog命令可以查看当前仓库的操作日志。
git log hello.txt //查看关于该文件的改动
git log -p hello.txt //查看该文件改动前后的差别

git diff查看工作树、暂存区、最新提交之间的差别。

  • 执行git diff命令,如果工作树和暂存区的状态并无差别,什么都不会显示
  • 要查看与最新提交的差别,执行git diff HEAD

在执行git commit命令之前先执行git diff HEAD命令,查看本次提交与上次提交之间有什么差别,等确认完毕后再进行提交。这里的HEAD是指向当前分支中最新一次提交的指针。

版本穿梭(回溯历史版本)

如果想要切换到之前的版本,可以先查看对应的版本号,

复制:Ctrl + Insert ;粘贴:Shift + Insert

鼠标快捷键:复制是双击左键 粘贴是鼠标中键

之后:

git reset --hard f6ad36c

打开.git文件夹下的HEAD文件,可以看到ref: refs/heads/main,表明指针指向main,目前处在main分支上

打开".git\refs\heads\main"文件可以看到当前指向的提交版本的哈希值。

Git 切换版本,底层其实是移动的 HEAD 指针,而不是创造很多副本

查看当前本地库中所有文件

git ls-tree --full-tree -r HEAD  //列出正在跟踪的所有已提交文件
git ls-files  //列出存储库中的所有文件,包括仅暂存但尚未提交的文件。

Git分支操作

版本控制过程中,同时推进多个任务,为每个任务,我们就可以创建每个任务的单独分支。使用分支意味着程序员可以把自己的工作从开发主线上分离开来,开发自己分支的时候,不会影响主线分支的运行。

创建分支

git checkout -b feature-A

//或者
git branch feature-A
git checkout feature-A

在feature-A分支修改文件后查看状态,此时工作区存在未提交的hello.txt。需要重复添加暂存区-提交本地库的过程

.git中的HEAD文件

git checkout - //可以表示切换到上一个分支

合并分支

要转到想要合并到的分支上,git merge 要合并的分支

git merge --no-ff feature-A

为了在历史记录中明确记录下本次分支合并,我们需要创建合并提交。所以使用--no-ff

Git 合并时 --no-ff 的作用_Double-Injured的博客-CSDN博客_git 快进式合并

git merge和git merge --no-ff的区别 图解易懂_阿喵阿旺的博客-CSDN博客

【Git学习笔记5】以普通模式合并(--no-ff)、push到远程库及分支管理策略_小詹学 Python的博客-CSDN博客


什么时候会遇到合并冲突:

冲突产生的原因:

合并分支时,两个分支在有两套完全不同的修改。Git 无法替我们决定使用哪一个。必须人为决定新代码内容。

(main|MERGING)情况下使用vim hello.txt查看文件具体冲突内容

此时提交到本地库不可以带文件名

合并时只会修改main分支下的内容,feature-A不会被修改

git commit --amend  // 修改提交信息

解决冲突的流程

合并时出现冲突,分支显示为:(main|MERGING)

(main|MERGING)情况下使用vim hello.txt查看文件具体冲突内容,并对其进行修改

之后重新加入缓存区&提交本地库。提交本地库时不可以带具体文件名

git merge no- ff fix-B

不加no-ff表示fast forward合并方式,no- ff表示不使用fast forward

压缩历史(更改历史)

在合并特性分支之前,如果发现已提交的内容中有些许拼写错误等,可以提交一个修改,将这个修改包含到前一个提交之中,压缩成一个历史记录。

git commit -am "Add feature-C" 
//只能提交已经追踪过且修改了的文件,新增文件需要add+commit

git rebase -i HEAD~2
//用上述方式执行git rebase命令
//可以选定当前分支中包含HEAD(最新提交)在内的两个最新历史记录为对象,并在编辑器中打开。

使用rebase后编辑内容:

这样一来,Fix typo就从历史中被抹去,也就相当于Add feature-C中从来没有出现过拼写错误。这算是一种良性的历史改写。

最后合并feature-C分支

团队协作

需要用到代码托管中心,把代码推送到远程服务器

  • push 将代码上传到远程库
  • clone 将代码复制到本地
  • pull 将代码拉取到本地(pull 是本地已有文件,clone是本地无源代码)
  • fork 将代码从其他团队的远程库复制到自己的远程库

团队内协作

跨团队协作

fork 将代码从其他团队的远程库复制到自己的远程库,可以从自己的远程库clone。修改完成后push到自己的远程库。之后发送pull request向其他团队的远程库,经审核后即可使用merge合并

github使用前准备

什么是SSH? - 知乎

设置SSH Key

GitHub上连接已有仓库时的认证,是通过使用了SSH的公开密钥认证方式进行的。

输入密码后会出现以下结果。(也可以不设置密码,直接点回车)

.ssh文件夹中会出现两个文件:id_rsa文件是私有密钥,id_rsa.pub是公开密钥。

添加公开密钥

在GitHub中添加公开密钥,今后就可以用私有密钥进行认证了。

查看id_rsa.pub的内容:

复制内容,在github中连接

确认连接github成功:

创建仓库(Repository)

建议远程库的名字和本地库相同

在Initialize this repository with a README选项上打钩,随后GitHub会自动初始化仓库并设置README文件,让用户可以立刻clone这个仓库。如果想向GitHub添加手中已有的Git仓库,建议不要勾选,直接手动push。

  • 可以在初始化时自动生成.gitignore文件。该文件用来描述Git仓库中不需管理的文件与目录。

这个设定会帮我们把不需要在Git仓库中进行版本管理的文件记录在.gitignore文件中,省去了每次根据框架进行设置的麻烦。下拉菜单中包含了主要的语言及框架,选择今后将要使用的即可。

# no .a files 
# 忽略所有.a文件
*.a

# but do track lib.a, even though you're ignoring .a files above
# 表示不忽略(跟踪)匹配到的lib.a文件或目录
!lib.a

# only ignore the TODO file in the current directory, 
# 只忽略当前目录中的TODO文件,而不是子目录/TODO
not subdir/TODO /TODO

# ignore all files in the build/ directory
# 忽略build/目录中的所有文件
build/

# ignore doc/notes.txt, but not doc/server/arch.txt
# 忽略doc/notes.txt,但不要忽略doc/server/arch.txt
doc/*.txt

# ignore all .pdf files in the doc/ directory
# 忽略doc/目录下的所有。pdf文件
doc/**/*.pdf
  • Add a license:许可协议

仓库地址:https://github.com/用户名/Hello-World

  • README.md会在初始化时生成好,README.md文件的内容会自动显示在仓库的首页当中。因此,人们一般会在这个文件中标明本仓库所包含的软件的概要、使用流程、许可协议等信息。

起别名:远程地址太长了

github操作

本地库代码推送到远程库(push)

git push 别名 分支

推送的最小单位是分支

git push @remoteName  @localBranch:@remoteBranch   
    
// eg.remoteName:origin  localBranch:ceshi  remoteBranch:test   
git push origin ceshi:test 

但是如果本地分支与远程分支名字一样的话,是可以简写的。

pull

$ git pull <远程主机名> <远程分支名>:<本地分支名>  //本地分支与远程分支名字一样,可以简写
$ git pull <ssh链接> <远程分支名>:<本地分支名>

clone

clone和pull不需要登录帐号,公共库的读取权限没有限制

不需要初始化本地库

与pull的区别:pull要求本地已经有文件

加入团队

填入需要邀请的人之后会获得一个链接,被邀请人可以通过点击链接加入

pull request

IDEA 集成 Git

配置 Git 忽略文件

一些文件与项目的实际功能无关,不参与服务器上部署运行。把它们忽略掉能够屏蔽 IDE 工具之

间的差异。

创建忽略规则文件 xxxx.ignore(前缀名随便起,建议是 git.ignore)。这个文件的存放位置原则上在哪里都可以,为了便于让~/.gitconfig 文件引用,建议也放在用户家目录下。C:\Users\ROG

git.ignore 文件模版内容如下:

# Compiled class file 
*.class
# Log file 
*.log 
 
# BlueJ files 
*.ctxt 
 
# Mobile Tools for Java (J2ME) 
.mtj.tmp/ 
 
# Package Files # 
*.jar 
*.war 
*.nar 
*.ear 
*.zip 
*.tar.gz 
*.rar 
 
# virtual machine crash logs, see 
http://www.java.com/en/download/help/error_hotspot.xml 
hs_err_pid* 
 
.classpath 
.project 
.settings 
target 
.idea 
*.iml

之后需要在.gitconfig文件(也在家目录)中引用.ignore文件

也可以直接在IDE中安装.ignore插件

定位 Git 程序

以pycharm为例:

VCS: version control setting

项目文件夹下出现.git文件,表示配置完成

且可以看到项目中文件变红

,在git中表示“untracked”状态,还未被加入暂存区

选择后会变绿。表示已添加到暂存区,但未提交本地库。

也可以右键项目根目录add

新建文件时会自动提示是否添加暂存区

之后可以选择commit(提交),会自动忽略ignore中的文件。commit成功后文件会变回黑色

切换版本

IDEA 使用的是 git checkout <commit> 的方式进行的版本切换

(IDEA中追踪过的文件可以不add直接commit)

当前的HEAD指针指向main,main分支指向second版本。切换版本可以直接选定版本右键checkout

分支操作

图中hot-fix master分别表示不同分支指向的版本,HEAD表示当前指针指向的分支

:在文件夹上点击右键/点击右下角分支标志

:右下角点击分支图标

点击右下角分支图标,切换到master分支,之后

手动修改到中间的result栏

IDEA集成github

安装github插件→settings中选择github,连接账号→VCS(Git)选择github,在github上共享项目

push 是将本地库代码推送到远程库,如果本地库代码跟远程库代码版本不一致,push 的操作是会被拒绝的。要想 push 成功,一定要保证本地库的版本要比远程库的版本高。在动手改本地代码之前,一定先检查下远程库跟本地代码的区别,如果本地的代码版本已经落后,要先 pull 一下远程库的代码,将本地代码更新到最新以后,然后再修改,提交,推送。

pull 是拉取远端仓库代码到本地,如果远程库代码和本地库代码不一致,会自动合并,如果自动合并失败,还会涉及到手动解决冲突的问题。

标签: 智能温度变送器ad180fd

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台