30分钟带你精通git使用

2022-12-28 0 797

一、 版控制辅助工具

1.1. 什么是版控制技术?

版控制技术(Version Control System):是一类历史纪录两个或若干个文档文本变动,以期今后翻查某一版修改情形的控制系统。版控制技术不但能应用作应用软件源码的文本文档,所以能对任何人类别的文档展开版控制。

常用的版控制技术有:cvs、svn、git

1.2. 为何要有版控制技术?

在联合开发操作过程中,时常须要对两个文档展开修正即使删掉,但我们又期望能留存这个文档的历史历史纪录,假如透过存储,所以管理工作出来会十分的繁杂。在王承恩联合开发时,假如须要王承恩合作联合开发两个网页,所以修正和分拆也会十分的头疼。难再次出现武装冲突。

1.3. 版控制技术进行分类

有关版控制

邻近地区版控制技术

邻近地区版控制技术就是在两台电脑上,历史纪录版的相同变动,确保文本不能遗失

优点:假如王承恩联合开发,每一人都在相同的控制系统和笔记本电脑上联合开发,没配套措施相互配合。

封闭式版控制系統

svn/cvs都是集中式的版控制技术

务器难以访问,其他人都难以组织工作。
30分钟带你精通git使用

分布式控制系统版控制技术

git是分布式控制系统的版控制技术。

伺服器之中。不须要互联网就能展开组织工作。当相连互联网时,采用者能优先选择将自己的伺服器与标识符库房展开并行。
30分钟带你精通git使用

二、 git

2.1. git如是说

Git是这款完全免费、开放源码的分布式控制系统版控制技术 ,用作灵巧高效率地处理任何人或小或大的项目。

Git 是 Linus Torvalds 为了帮助管理工作 Linux 内核联合开发而联合开发的两个开放源码的版控制应用软件。

2.2. git安装

下载地址

# 推荐采用国内镜像下载 http://npm.taobao.org/mirrors/git-for-windows 1. 不要安装在中文目录 2. 不要采用桌面管理工作应用软件

安装很简单,一直下一步即可。在任意的目录下右键,能再次出现下图,表示安装成功了。

30分钟带你精通git使用

git用法方式主要有两种,

git gui,即图形化界面的方式git bash,命令行的方式

bash是linux控制系统的命令,因此学习git前,我们先学习一下bash

在任意文档夹中,都能采用右键,透过git bash here打开命令行窗口,此时的路径就是当前目录。窗口上右键,透过options–>Text–>select能调整字体的大小。
# cd 改变目录 (change directory) cd images #进入images文档夹 cd .. #进入上一层目录 cd ~ #进入采用者根目录 # tab 自动补全,当我们输命令或者目录很长时,能采用tab键展开自动补全。 # 按两次tab,会把所有符合要求的文本都列出来。 # pwd 打印当前目录的路径 (print work directory) pwd # ls 展示当前目录列表(list) ls # 展示当前目录ls -a# 展示全部文本,包括隐藏文档 ls -l # 以列表的形式展示文本 ls -al # 以列表的形式展示所有的文本,包括隐藏文档。 ls –help # 查看ls所有的参数。 ls -l images # 展示images目录下的文档,假如没有写目录,默认展示当前目录。 # clear reset清屏 clear # 清除屏幕文本,滚动条,保留了历史 reset # 重置,历史历史纪录没了。 # mkdir 创建两个文档夹 (make directory) mkdir css # 创建两个css的文档夹 mkdir css img js # 创建了三个文档夹 # rmdir 删掉两个空的文档夹(没啥用) rmdir img # 删掉文件夹 # touch 创建文档 touch index.html #创建了两个index.html文档 touch css/index.css # 在css目录下创建idnex.css文档 # rm 删掉两个文档 rm index.html # 删掉index.html文档 rm js # 删掉空的js文档夹 rm -r css # 递归删掉两个文档夹 # mv 移动文档(move)mv index.html js# 将html文档移动到js文档夹中 mv index.html index2.html # 将index.html重命名为index2.html # cp 复制文档(cp)cp index.html index2.html# 复制index.html文档,命名为index2.html cp -r css css02 # 假如复制的是文档夹,须要采用-r参数。 # cat 查看文档全部文本cat index.html# less 查看文档部分文本 less index.html # q退出查看

2.3. 基本操作

初始化git库房git init查看当前git库房的状态git status将文档添加到git的暂存区git add 文档名将文档由暂存区提交到库房区git commit -m 提交说明查看提交日志git log
# 初始化git库房,会在当前目录生成两个隐藏文档夹 .git 不要去修正这个文档夹下的任意东西。 git init # 查看git的状态 ,假如此时新建两个文档,所以这个文档是没有被追踪的,说白了git还没有管理工作这个新建的文档 git status # 让git管理工作这个新建的文档git add index.html# 让文档由暂存区提交到库房区。此时文档才真正的被git管理工作了。 # 假如提交日志乱码,右键–>options–>Text–>将编码改成utf-8git commit -m第一次提交 # 查看提交日志 git log

2.4. 配置邮箱和采用者名

假如第一次采用git,会要求设置采用者名和邮箱

# git config user.name 你的目标采用者名 # git config user.email 你的目标邮箱名 # 这种配置方式只有在当前库房生效git config user.name shuaige git config user.email 669104343@qq.com# 能采用–global参数,配置全局的采用者名和邮箱,这样别的git库房就不须要重新配置了。 # 假如同时配置了局部的和全局的,所以局部的采用者名和邮箱将会生效。git config –global user.name shuaige git config –global user.email 669104343@qq.com# 查看配置信息git config –list

2.5. git的组织工作原理

30分钟带你精通git使用

2.6. git命令详解

2.6.1. git add(重点)

作用:将文档由 组织工作区 添加到 暂存区,暂存文档

命令:

git git add 文档名

例如: git add index.html

git add –all 或者 git add -A 或者git add .(简写) 添加所有文档

git add a.txt b.txt 同时添加两个文档

git add *.js 添加当前目录下的所有js文档

2.6.2. git checkout 文档名

作用:暂存区的文本恢复到组织工作区。git checkout 1.txt 将暂存区中1.txt文档恢复到组织工作区

2.6.3. git commit(重点)

作用:将文档由 暂存区 添加到 库房区git commit -m “提交说明”

2.6.4. git status

作用:查看文档的状态

命令:git status

命令:git stauts -s 简化日志输出格式

2.6.5. git log

作用:查看提交日志git log 只能查看当前head和以前的日志git log –oneline 简洁的日志信息git reflog 查看所有的提交变更日志

2.6.6. git reset

作用:版回退,将标识符恢复到已经提交的某两个版中。

git reset –hard 版号 将标识符回退到某个指定的版(版号只要有前几位即可)

git reset –hard head~1

将版回退到上一次提交

~1:上一次提交~2:上上次提交~0:当前提交

2.7. git忽视文档

在库房中,有些文档是不想被git管理工作的,比如数据的配置密码、写标识符的一些思路等。git能透过配置从而达到忽视掉一些文档,这样这些文档就能不用提交了。在库房的根目录创建两个.gitignore的文档,文档名是固定的。将不须要被git管理工作的文档路径添加到.gitignore中
# 忽视idea.txt文档 idea.txt # 忽视.gitignore文档 .gitignore # 忽视css下的index.js文档 css/index.js # 忽视css下的所有的js文档 css/*.js # 忽视css下的所有文档 css/*.* # 忽视css文档夹 css

三、 git分支操作

分支就是科幻电影里面的平行宇宙,当你正在笔记本电脑前努力学习Git的时候,另两个你正在另两个平行宇宙里努力学习SVN。

假如两个平行宇宙互不干扰,那对现在的你也没啥影响。不过,在某个时间点,两个平行宇宙分拆了,结果,你既学会了Git又学会了SVN!

30分钟带你精通git使用

3.1. 为何要有分支?

假如你要联合开发两个新的功能,须要2周时间,第一周你只能写50%标识符,假如此时立即提交,标识符没写完,不完整的标识符会影响到别人难以组织工作。假如等标识符写完再提交,标识符很难遗失,风险很大。有了分支,你就能创建两个属于自己的分支,别人看不到,也不影响别人,你在自己的分支上组织工作,提交到自己的分支上,等到功能联合开发完毕,一次性的分拆到原来的分支。这样既安全,又不影响他人组织工作。在组织工作操作过程中,时常会碰到多任务并行联合开发 的情形,采用分支就能很好的避免任务之间的影响。其他版辅助工具比如svn,cvs中也有分支这个概念,但这些辅助工具中的分支操作十分的慢,形同摆设。

3.2. 分支操作的命令

3.2.1. 创建分支

git branch 分支名称创建分支,分支中的标识符,在创建时与当前分支的文本完全相同。git在第一次提交时,就有了两个叫master的主分支。

3.2.2. 查看分支

git branch能查看所有的分支,在当前分支的前面会有两个*

3.2.3. 切换分支

git checkout 分支名称切换分支在当前分支的任何人操作,都不能影响到其他的分支,除非展开了分支分拆。切换分支之前,必须确保标识符已经提交了

3.2.4. 创建并切换分支

git checkout -b 分支名称 创建并切换分支

3.2.5. 删掉分支

git branch -d 分支名称 能删掉分支注意:不能在当前分支删掉当前分支,须要切换到其他分支才能删掉。注意:master分支是能删掉的,但不推荐所以做。

3.2.6. 分拆分支

git merge 分支名称 将其他分支的文本分拆到当前分支。在master分支中执行git merge dev 将dev分支中的标识符分拆到master分支

3.3. git分支的组织工作原理

30分钟带你精通git使用

3.4. git分拆武装冲突

对于同两个文档,假如有多个分支须要分拆时,难再次出现武装冲突。分拆分支时,假如再次出现武装冲突,只能手动处理,再次提交,一般的作法,把自己的标识符放到武装冲突标识符的后面即可。

四、远程库房

所有的程序员都能透过远程库房来展开版的共享,达到其他人的标识符一致的效果。

4.1. 远程库房相关的命令

4.1.1. git push

作用:将邻近地区标识符提交到远程库房git push 库房地址 master 在标识符提交到远程库房,注意master分支必须写,不能省略例子:git push git@github.com:hucongcong/test.git master 假如第一次采用,须要填写github的采用者名和密码

4.1.2. git pull

作用:将远程的标识符下载到邻近地区git pull 标识符地址 将远程的标识符中master分支下载到邻近地区通常在push前,须要先pull一次。

4.1.3. git clone

作用:克隆远程库房的标识符到邻近地区git clone 库房地址 自定义邻近地区库房名 将整个库房克隆到邻近地区

4.1.4. git remote

每次push和pull操作都须要带上远程库房的地址,十分的麻烦,我们能给库房地址设置两个别名

git remote add 库房别名 库房地址

采用库房别名替代库房地址。库房别名相当于两个变量,库房地址就是对应的值。

git remote add hucc git@github.com:hucongcong/test.git 设置了两个hucc的库房别名,以后push和pull都能不用库房地址,而用hucc

git remote remove hucc 删掉hucc这个库房别名。

git remote 查看所有的库房别名

in的远程地址,指向的就是克隆的远程地址。

4.2. github

git与github没有直接的关系。

git是两个版控制辅助工具。github是两个标识符托管平台,是git的两个远程标识符库房。今后组织工作时,公司会有自己的标识符库房。

github官网

开放源码中国-git 码云

1. gitHub是两个面向开放源码及私有应用软件项目的托管平台,因为只支持git 作为唯一的版库格式展开托管,故名gitHub。 2. github完全免费,标识符其他人都能看到,但只有你自己能修正。付费的能隐藏。

4.3. SSH免密码登陆

(对称加密与非对称加密)

每次push标识符,都须要输入采用者名跟密码,十分的麻烦。因此我们能配置两个SSH免密码登陆。

github为了账户的安全,须要对每一次push请求都要验证采用者的身份,只有合法的采用者才能push采用ssh能实现免密码操作(不须要采用密码)

4.3.1. SSH免密码登录配置

1 创建SSH Key:ssh-keygen -t rsa2 在文档路径 C:\采用者\当前采用者名\ 找到 .ssh 文档夹3 文档夹中有两个文档:私钥:id_rsa公钥:id_rsa.pub4 在 github -> settings -> SSH and GPG keys网页中,新创建SSH key5 粘贴 公钥 id_rsa.pub 文本到对应文本框中5 在github中新建库房或者采用现在库房,拿到git@github.com:采用者名/库房名.git6 此后,再次SSH方式与github“通信”,不用输入密码确认身份了

五、idea集成git

5.1.idea配置git

​ 首先,确保邻近地区已经安装过git客户端,idea会展开自动检测,假如没有,或者想展开手动调整,须要在这里重新配置。配置成功之后能透过点击Test按钮测试是否OK!

30分钟带你精通git使用

5.2:idea上传项目到邻近地区库房

30分钟带你精通git使用
30分钟带你精通git使用

​ 选中指定项目右键,优先选择Git将项目添加到版控制,然后采用Commit Directory提交项目到邻近地区库房。

30分钟带你精通git使用
30分钟带你精通git使用
30分钟带你精通git使用

5.3:将邻近地区库房项目推送到远程库房

30分钟带你精通git使用
30分钟带你精通git使用
30分钟带你精通git使用
30分钟带你精通git使用

​ 注意:假如没有配置ssh公钥,第一次邻近地区推送,须要输入GitHub或gitee远程库房采用者名密码。

5.4:idea设置git忽略部分文档

0、安装.ignore插件

​ 点击File->Settings ,找到Plugins搜索ignore,然后install,OK重启idea

30分钟带你精通git使用

1、创建项目,在项目中添加.gitignore文档

30分钟带你精通git使用
30分钟带你精通git使用
30分钟带你精通git使用

​ 建议.gitignore文档文本

###################################################################### # Build Tools .gradle /build/ !gradle/wrapper/gradle-wrapper.jar target/ !.mvn/wrapper/maven-wrapper.jar ###################################################################### # IDE ### STS ### .apt_generated .classpath .factorypath .project .settings .springBeans ### IntelliJ IDEA ### .idea *.iws *.iml *.ipr out gen ### NetBeans ### nbproject/private/ build/* nbbuild/ dist/ nbdist/ .nb-gradle/ ###################################################################### # Others *.log *.xml.versionsBackup !*/build/*.java !*/build/*.html !*/build/*.xml # .gitignore文档文本编写规则 *.a # 忽略所有 .a 结尾的文档 !lib.a # 但 lib.a 除外 /TODO # 仅仅忽略项目根目录下的 TODO 文档,不包括 subdir/TODO build/ # 忽略 build/ 目录下的所有文档 doc/*.txt # 会忽略 doc/notes.txt 但不包括 doc/server/arch.txt

2、创建邻近地区库房

$ git init

3、创建个人分支

$ git checkout -b dev

4、添加文档到版控制,提交到邻近地区库房

$ git add . $ git commit -m “first commit”

5、推送到远程库房

$ git push https://gitee.com/liyunyi/ssm.git dev

6、分拆分支推送到主分支

$ git checkout master $ git merge dev $ git push https://gitee.com/liyunyi/ssm.git master

5.5:克隆远程库房项目到邻近地区

30分钟带你精通git使用
30分钟带你精通git使用

附件:命令大全

30分钟带你精通git使用
Workspace:组织工作区Index / Stage:暂存区Repository:库房区(或邻近地区库房)Remote:远程库房

1、库房

# 在当前目录新建两个Git标识符库 $ git init # 新建两个目录,将其初始化为Git标识符库 $ git init [project-name] # 下载两个项目和它的整个标识符历史 $ git clone [url]

2、配置

# 显示当前的Git配置 $ git config –list # 编辑Git配置文档 $ git config -e [–global] # 设置提交标识符时的用户信息 $ git config [–global] user.name “[name]” $ git config [–global] user.email “[email address]”

3、增加/删掉文档

# 添加指定文档到暂存区 $ git add [file1] [file2] … # 添加指定目录到暂存区,包括子目录 $ git add [dir] # 添加当前目录的所有文档到暂存区 $ git add . # 添加每一变动前,都会要求确认 # 对于同两个文档的多处变动,能实现分次提交 $ git add -p # 删掉组织工作区文档,并且将这次删掉放入暂存区 $ git rm [file1] [file2] … # 停止追踪指定文档,但该文档会保留在组织工作区 $ git rm –cached [file] # 改名文档,并且将这个改名放入暂存区 $ git mv [file-original] [file-renamed]

4、标识符提交

# 提交暂存区到库房区 $ git commit -m [message] # 提交暂存区的指定文档到库房区 $ git commit [file1] [file2] … -m [message] # 提交组织工作区自上次commit之后的变动,直接到库房区 $ git commit -a # 提交时显示所有diff信息 $ git commit -v # 采用一次新的commit,替代上一次提交 # 假如标识符没有任何人新变动,则用来改写上一次commit的提交信息 $ git commit –amend -m [message] # 重做上一次commit,并包括指定文档的新变动 $ git commit –amend [file1] [file2] …

5、分支

# 列出所有邻近地区分支 $ git branch # 列出所有远程分支 $ git branch -r # 列出所有邻近地区分支和远程分支 $ git branch -a # 新建两个分支,但依然停留在当前分支 $ git branch [branch-name] # 新建两个分支,并切换到该分支 $ git checkout -b [branch] # 新建两个分支,指向指定commit $ git branch [branch] [commit] # 新建两个分支,与指定的远程分支建立追踪关系 $ git branch –track [branch] [remote-branch] # 切换到指定分支,并更新组织工作区 $ git checkout [branch-name] # 切换到上两个分支 $ git checkout – # 建立追踪关系,在现有分支与指定的远程分支之间 $ git branch –set-upstream [branch] [remote-branch] # 分拆指定分支到当前分支 $ git merge [branch] # 优先选择两个commit,分拆进当前分支 $ git cherry-pick [commit] # 删掉分支 $ git branch -d [branch-name] # 删除远程分支 $ git push origin –delete [branch-name] $ git branch -dr [remote/branch]

6、标签

# 列出所有tag $ git tag # 新建两个tag在当前commit $ git tag [tag] # 新建两个tag在指定commit $ git tag [tag] [commit] # 删掉邻近地区tag $ git tag -d [tag] # 删掉远程tag $ git push origin :refs/tags/[tagName] # 查看tag信息 $ git show [tag] # 提交指定tag $ git push [remote] [tag] # 提交所有tag $ git push [remote] –tags # 新建两个分支,指向某个tag $ git checkout -b [branch] [tag]

7、查看信息

# 显示有变更的文档 $ git status # 显示当前分支的版历史 $ git log # 显示commit历史,和每次commit发生变更的文档 $ git log –stat # 搜索提交历史,根据关键词 $ git log -S [keyword] # 显示某个commit之后的所有变动,每一commit占据一行 $ git log [tag] HEAD –pretty=format:%s # 显示某个commit之后的所有变动,其”提交说明”必须符合搜索条件 $ git log [tag] HEAD –grep feature # 显示某个文档的版历史,包括文档改名 $ git log –follow [file] $ git whatchanged [file] # 显示指定文档相关的每一次diff $ git log -p [file] # 显示过去5次提交 $ git log -5 –pretty –oneline # 显示所有提交过的采用者,按提交次数排序 $ git shortlog -sn # 显示指定文档是什么人在什么时间修正过 $ git blame [file] # 显示暂存区和组织工作区的差异 $ git diff # 显示暂存区和上两个commit的差异 $ git diff –cached [file] # 显示组织工作区与当前分支最新commit之间的差异 $ git diff HEAD # 显示两次提交之间的差异 $ git diff [first-branch]…[second-branch] # 显示今天你写了多少行标识符 $ git diff –shortstat “@{0 day ago}” # 显示某次提交的元数据和文本变动 $ git show [commit] # 显示某次提交发生变动的文档 $ git show –name-only [commit] # 显示某次提交时,某个文档的文本 $ git show [commit]:[filename] # 显示当前分支的最近几次提交 $ git reflog

8、远程并行

# 下载远程库房的所有变动 $ git fetch [remote] # 显示所有远程库房 $ git remote -v # 显示某个远程库房的信息 $ git remote show [remote] # 增加两个新的远程库房,并命名 $ git remote add [shortname] [url] # 取回远程库房的变动,并与邻近地区分支分拆 $ git pull [remote] [branch] # 上传邻近地区指定分支到远程库房 $ git push [remote] [branch] # 强行推送当前分支到远程库房,即使有武装冲突 $ git push [remote] –force # 推送所有分支到远程库房 $ git push [remote] –all

9、撤销

# 恢复暂存区的指定文档到组织工作区 $ git checkout [file] # 恢复某个commit的指定文档到暂存区和组织工作区 $ git checkout [commit] [file] # 恢复暂存区的所有文档到组织工作区 $ git checkout . # 重置暂存区的指定文档,与上一次commit保持一致,但组织工作区不变 $ git reset [file] # 重置暂存区与组织工作区,与上一次commit保持一致 $ git reset –hard # 重置当前分支的指针为指定commit,同时重置暂存区,但组织工作区不变 $ git reset [commit] # 重置当前分支的HEAD为指定commit,同时重置暂存区和组织工作区,与指定commit一致 $ git reset –hard [commit] # 重置当前HEAD为指定commit,但保持暂存区和组织工作区不变 $ git reset –keep [commit] # 新建两个commit,用来撤销指定commit # 后者的所有变动都将被前者抵消,并且应用到当前分支 $ git revert [commit] # 暂时将未提交的变动移除,稍后再移入 $ git stash $ git stash pop

10、其他

# 生成两个可供发布的压缩包 $ git archive

参考网址

# git大全 https://gitee.com/all-about-git # 深入浅出git教程 https://www.cnblogs.com/syp172654682/p/7689328.html # 阮一峰git教程 https://www.liaoxuefeng.com/wiki/896043488029600 # idea中.ignore忽略提交文档到Git的采用 https://blog.csdn.net/byy8023/article/details/82259155?utm_medium=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase

相关文章

发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务