3小时学会使用Git
作者:伤心脑残猪_940 | 来源:互联网 | 2023-05-18 20:29
GIT不仅仅是个版本控制系统,她还是个内容管理系统(CMS),工作管理系统等git与svn的区别点:1)GIT是分布式的,SVN不是,这也是最核心的区别;2)GIT把内容按元数据方式存储,而SVN
GIT不仅仅是个版本控制系统,她还是个内容管理系统(CMS),工作管理系统等
git与svn的区别点:
1)GIT是分布式的,SVN不是,这也是最核心的区别;
2)GIT把内容按元数据方式存储,而SVN是按文件:所有的资源控制系统都是把文件的元信息隐藏在一个类似.svn,.cvs等的文件夹里;
3)GIT分支和SVN的分支不同:分支在svn中一点不特别,就是版本库中的另外的一个目录;
4)GIT没有一个全局的版本号,而SVN有:目前为止这是跟SVN相比GIT缺少的最大的一个特征;
5)GIT的内容完整性要优于SVN:git的内容存储使用的是SHA-1哈希算法,保证代码内容的完整性。
GIT配置
git提供了一个叫做git config的工具,专门用来配置或者读取相应的都工作环境变量。
这些环境变量,决定了git在各个环节的具体工作方式和行为。这些变量存放在三个不同的地方:
/etc/gitconfig文件:系统中对所有用户都普遍适用的配置。若使用git config时用 --system选项,读写的就是这个文件
~/.gitconfig文件:用户目录下的配置文件只适用于该用户。若使用git config时用 --global选项,读写的就是这个文件
当前项目的Git目录中的配置文件(也就是工作目录中的./git/config文件):这里的配置仅仅针对当前项目有效。每个级别的配置都会覆盖上层的相同配置。
用户信息
配置个人的用户名称和电子邮件地址:
git config --global user.name "runoob"
git config --global user.email test@runoob.com
文本编辑器
git config --global core.editor emacs
差异分析工具
git config --global merge.tool vimdiff
查看配置信息
git config --list 对于出现重复的变量名,那就说明他们来自不同的配置文件,不过最终Git实际采用的是最后一个。
也可以直接查看某一个环境变量的设定:git config user.name
GIT工作流程
一般的工资流程如下:
克隆Git资源作为工作目录。
在克隆的资源上添加或者修改文件
如果其他人修改了,你可以更新资源
在提交之前查看修改
提交修改
在修改完成后,如果发现错误,可以撤回提交并再次修改并提交
GIT工作区,暂存区和版本库
工作区:就是你在电脑里能够看那到的目录
暂存区:英文名stage,或者index.一般存放在.git目录下的index文件中,所以我们把暂存区有时也叫作索引。
版本库: 工作区中有一个隐藏的目录.git,这个不算工作区,而是Git的版本库。
当对工作区修改或者是新增的文件执行git add命令时,暂存区目录树被更新,同时工作区修改的文件内容被写入到对象库中的一个新对象中,而该对象的ID被记录在暂存区的文件索引中。
当执行提交操作git commit时,暂存区的目录树写到版本库中,master分支会做出相应的更新。即master指向的目录树就是提交时暂存区的目录树
当执行git reset HEAD命令时,暂存区的目录树会被重写,被master分支指向的目录树所替换,但是工作区不受影响。
当执行git rm -cached 命令时,会直接从暂存区删除文件,工作区则不做出改变
当执行git checkout . 或者git checkout --命令时,会用暂存区全部或指定的文件替换工作区的文件,会覆盖掉工作区中未保存的内容
当执行git checkout HEAD . 或者git checkout HEAD 命令时,会用HEAD指向的master分支中的全部或者部分文件替换暂存区和工作区中的文件
Git创建仓库
git init :用来初始化一个Git仓库,使用当前目录作为仓库,则直接执行git init,如果想指定某一目录为仓库则git init newrepo
如果当前目录下有几个文件想要纳入版本控制,需要先用git add命令告述Git开始对这些文件进行跟踪,然后提交:
git add *.c //批量添加
git add readme //单独添加
git commit -m '初始化项目版本'
git clone: 用来从现有Git仓库中拷贝项目
克隆仓库的命令格式为:git clone
如果需要克隆到指定目录:git clone 比如,$ git clone git://github.com/schacon/grit.git mygrit
GIT基本操作
获取与创建项目命令
git init 本地化一个仓库
git clone拷贝一个Git仓库到本地,让自己能够查看该项目,或者进行修改。
git add 添加文件到缓存 git add 文件名 /git add .
git status -s 查看项目的当前状态 'AM'状态的意思是,这个文件在我们将它添加到缓存之后又有改动,改动后又执行了add操作;-s表示获取简短的结果输出。
git diff :来查看执行git status的结果的详细信息
git diff 命令显示已写入缓存与已修改但尚未写入缓存的改动的区别
git diff 尚未缓存的改动
git diff --cached 查看已缓存的改动
git diff HEAD 查看已缓存的与未缓存的所有改动
git diff --stat 显示摘要而非整个diff
对比:git status 显示你上次提交后的更改或者写入缓存的改动,而git diff 一行一行地显示这些改动具体是啥
git commit 使用add命令将想要快照的内容写入缓存区,而执行commit将缓存区内容添加到仓库中。
如果你觉得git add提交缓存的流程太过繁琐,可以通过git commit -a 来完成
git reset HEAD 命令用于取消已缓存的内容
git rm 会将条目从缓存区中移除。默认情况下git rm file会将文件从缓存区和你的硬盘中(工作目录)删除
如果你要在工作目录中留着该文件,可以使用git rm --cached:
git mv命令用于移动或者重命名一个文件,目录,软连接。git mv read readme 修改文件read 为readme
Git分支管理
几乎每一种版本控制系统都以某种形式支持分支,使用分支意味着你可以从开发主线上分离开来,然后在不影响主线的同时继续工作。
创建分支命令:git branch (branchname)
切换分支命令:git checkout (branchname)
合并分支命令:git merge
列出分支基本命令: git branch 没有参数时,git branch会列出你在本地的分支
git branch testing
git branch 会显示出testing分支
git checkout master 切换到master分支,我们也可以使用git checkout -b (branchname)命令来创建新分支并立即切换到该分支,从而在该分支中操作。
git branch -d (branchname) 删除分支命令 如git branch -d testing
分支合并
git merge
$ git branch
* master
newtest
$ ls
README
test.txt
test2.txt
$ git merge newtest
Updating 2e082b7..556f0a0
Fast-forward
test2.txt | 1 -
1 file changed, 1 deletion(-)
delete mode 100644 test2.txt
$ ls
README
test.txt
以上实例中我们将 newtest 分支合并到主分支去
git diff 查看冲突文件的不同之处
解决冲突后,通过git add 告述Git文件冲突已经解决
Git 查看提交历史
git log命令查看提交历史
git log --oneline 查看历史纪录的简洁的版本 --graph选项,查看历史中什么时候出现了分支,合并,--reverse 来逆向显示所有日志
如果只想查看指定用户的提交日志可以使用命令git log --author=Linux --online -5
如果你要指定日期,可以执行几个选项:--since 和 --before ,但是你也可以用--until和--after
$ git log --oneline --before={3.weeks.ago} --after={2010-04-18} --no-merges
Git标签
如果你达到一个重要的阶段,并希望永远记住那个特别的提交快照,你可以使用git tag 给它打上标签
如:git tag -a v1.0 给最新一次提交打上(HEAD) "v1.0" 的标签
-a选项意为"创建一个带注解的标签".不用-a选项也可以执行的,但它不会记录这标签是啥时候打的,谁打的,也不会让你添加标签的注解
git tag -a v2.0 已提交的版本号
git tag 查看所有标签
Git远程仓库(Github)
添加远程库
要添加一个新的远程仓库,可以指定一个简单的名字,以便将来引用,命令格式如下:
git remote add [shortname] [url]
由于你的本地Git仓库和GitHub仓库之间的传输是通过SSH加密的,所以我们需要配置验证信息:
使用以下命令生成SSH Key:
ssh-keygen -t rsa -C "youremail@example.com"
后面的 your_email@youremail.com 改为你在 github 上注册的邮箱,之后会要求确认路径和输入密码,我们这使用默认的一路回车就行。成功的话会在~/下生成.ssh文件夹,进去,打开 id_rsa.pub,复制里面的 key。
回到 github 上,进入 Account => Settings(账户配置)。
为了验证是否成功,输入以下命令:
$ ssh -T git@github.com
Hi tianqixin! You've successfully authenticated, but GitHub does not provide shell access.
现在我们根据GitHub的提示在本地的仓库下运行命令:
$ mkdir runoob-git-test # 创建测试目录
$ cd runoob-git-test/ # 进入测试目录
$ echo "# 菜鸟教程 Git 测试" >> README.md # 创建 README.md 文件并写入内容
$ ls # 查看目录下的文件
README
$ git init # 初始化
$ git add README.md # 添加文件
$ git commit -m "添加 README.md 文件" # 提交并备注信息
[master (root-commit) 0205aab] 添加 README.md 文件
1 file changed, 1 insertion(+)
create mode 100644 README.md
# 提交到 Github
$ git remote add origin git@github.com:tianqixin/runoob-git-test.git
$ git push -u origin maste
接下来我们返回 Github 创建的仓库,就可以看到文件已上传到 Github上
查看当前的远程库
git remote -v
提取远程仓库
Git有两个命令用来提取远程仓库的更新
1,从远程仓库下载新分支与数据:
git fetch 该命令执行完成后需要执行git merge远程分支到你所在的分支
2,从远端仓库提取数据并尝试合并到当前分支:
git pull 该命令就是在执行git fetch 之后紧接着执行git merge远程分支到你所在的任意分支
假设你配置好了一个远程仓库,并且你想要提取更新的数据,你可以首先执行 git fetch [alias] 告诉 Git 去获取它有你没有的数据,然后你可以执行 git merge [alias]/[branch] 以将服务器上的任何更新(假设有人这时候推送到服务器了)合并到你的当前分支。
如:git fetch origin 查看分支是否被更新,如果已经更新,我们尅有使用以下命令将同步更新到本地
git merge origin/master
推送到远程仓库
推送你的新分支与数据到某个远端仓库命令:
git pull [alias] [branch] 将你的[branch]分支推送成为[alias]远程仓库上的[branch]分支。
touch runoob-test.txt # 添加文件
$ git add runoob-test.txt
$ git commit -m "添加到远程"
master 69e702d] 添加到远程
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 runoob-test.txt
$ git push origin master # 推送到 Github
删除远程仓库
git remote rm [别名]
Git服务器搭建
推荐阅读
-
MongoDB的高可用架构主要依赖于其Replica Set机制。Replica Set通过多个mongod节点的协同工作,实现了数据的冗余存储和故障自动切换,确保了系统的高可用性和数据的一致性。本文将深入解析Replica Set的工作原理及其在实际应用中的配置和优化方法,帮助读者更好地理解和实施MongoDB的高可用架构。 ...
[详细]
蜡笔小新 2024-11-02 12:54:33
-
AppFog 是一个基于 CloudFoundry 的多语言 PaaS(平台即服务)提供商,允许用户在其平台上轻松构建和部署 Web 应用程序。本文将通过详细的图文步骤,指导读者如何在 AppFog 免费云平台上成功部署 WordPress,帮助用户快速搭建个人博客或网站。 ...
[详细]
蜡笔小新 2024-11-02 12:50:27
-
-
本文深入解析了分布式开源任务调度框架 TBSchedule 的核心原理与应用场景,并通过实际案例详细介绍了其部署与使用方法。首先,从源码下载开始,详细阐述了 TBSchedule 的安装步骤和配置要点。接着,探讨了该框架在大规模分布式环境中的性能优化策略,以及如何通过灵活的任务调度机制提升系统效率。最后,结合具体实例,展示了 TBSchedule 在实际项目中的应用效果,为开发者提供了宝贵的实践经验。 ...
[详细]
蜡笔小新 2024-11-02 11:59:52
-
在Python编程中,探讨了并发与并行的概念及其区别。并发指的是系统同时处理多个任务的能力,而并行则指在同一时间点上并行执行多个任务。文章详细解析了阻塞与非阻塞操作、同步与异步编程模型,以及IO多路复用技术的应用。通过模拟socket发送HTTP请求的过程,展示了如何创建连接、发送数据和接收响应,并强调了默认情况下socket的阻塞特性。此外,还介绍了如何利用这些技术优化网络通信性能和提高程序效率。 ...
[详细]
蜡笔小新 2024-11-02 10:32:48
-
本文详细解析了如何使用 jQuery 实现一个在浏览器地址栏运行的射击游戏。通过源代码分析,展示了关键的 JavaScript 技术和实现方法,并提供了在线演示链接供读者参考。此外,还介绍了如何在 Visual Studio Code 中进行开发和调试,为开发者提供了实用的技巧和建议。 ...
[详细]
蜡笔小新 2024-10-31 19:54:38
-
如何将PHP文件上传至服务器及正确配置服务器地址 ...
[详细]
蜡笔小新 2024-10-31 15:32:47
-
通过在项目中引用 NuGet 包 `ExcelDataReader`,可以实现高效地读取和导入 Excel 文件中的数据。具体方法是在项目中执行 `Install-Package ExcelDataReader` 命令,然后通过定义一个 `LeadingIn` 方法并传入上传文件的路径来完成数据导入。该方法不仅简化了代码逻辑,还显著提升了数据处理的效率和可靠性。 ...
[详细]
蜡笔小新 2024-11-02 15:15:06
-
本书详细介绍了在最新Linux 4.0内核环境下进行Java与Linux设备驱动开发的全面指南。内容涵盖设备驱动的基本概念、开发环境的搭建、操作系统对设备驱动的影响以及具体开发步骤和技巧。通过丰富的实例和深入的技术解析,帮助读者掌握设备驱动开发的核心技术和最佳实践。 ...
[详细]
蜡笔小新 2024-11-02 08:40:11
-
从GitHub仓库 `https://github.com/vonmax007/RobotSimulation` 下载的代码包含多种算法,其中算法1的文件目录中包含了CMake文件。为了在Windows环境下使用已安装的CMake GUI运行这些文件,需要先确保CMake已正确安装,并按照以下步骤操作:打开CMake GUI,设置源代码路径和构建路径,点击“Configure”配置项目,然后点击“Generate”生成构建文件。最后,在生成的构建目录中使用命令行或IDE进行编译和运行。 ...
[详细]
蜡笔小新 2024-11-01 19:42:15
-
掌握PHP框架开发与应用的核心知识点对于构建高效PHP框架至关重要。本文综述了开发PHP框架所需的关键技术和能力,包括但不限于对PHP语言的深入理解、设计模式的应用、数据库操作、安全性措施以及性能优化等方面。对于初学者而言,熟悉主流框架如Laravel、Symfony等的实际应用场景,有助于更好地理解和掌握自定义框架开发的精髓。 ...
[详细]
蜡笔小新 2024-10-31 14:51:01
-
题目《UVa 11978 福岛核爆问题》涉及圆与多边形交集面积的计算及二分法的应用。该问题的核心在于通过精确的几何运算与高效的算法实现来解决复杂图形的面积计算。在实现过程中,特别需要注意的是对多边形顶点的平移处理,确保所有顶点包括最后一个顶点 \( p[n] \) 都经过正确的位移,以避免因细节疏忽导致的错误。此外,使用循环次数为50次的二分法能够有效提高算法的精度和稳定性。 ...
[详细]
蜡笔小新 2024-10-30 12:36:08
-
PHP连接MySQL的三种方法及预处理语句防止SQL注入的技术详解 ...
[详细]
蜡笔小新 2024-10-29 16:44:38
-
在探讨 AS3 中的数据深度复制技术时,本文详细介绍了实现数据深度克隆的有效方法。通过对比多种方案,最终确定了一种高效且可靠的实现方式,所有代码均来源于公开资源,确保了方法的实用性和可操作性。 ...
[详细]
蜡笔小新 2024-10-29 15:46:45
-
在幼儿园中,有 \( n \) 个小朋友需要通过投票来决定是否午睡。尽管这个问题对每个孩子来说并不是特别重要,但他们仍然希望通过谦让的方式达成一致。每个人都有自己的偏好,但为了集体和谐,他们决定采用一种最小割的方法来解决这一问题。这种方法不仅能够确保每个人的意愿得到尽可能多的尊重,还能找到一个最优的解决方案,使整体满意度最大化。 ...
[详细]
蜡笔小新 2024-10-29 15:37:41
-
需求:在指定的DIV区域内点击时,需展示该区域内的附加操作面板;而在区域外点击时,则应自动隐藏该附加操作面板。通过精准的事件监听与处理,确保用户交互体验的流畅性和直观性。 ...
[详细]
蜡笔小新 2024-10-29 14:22:17
-