首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Git中的命令和操作

Git中的命令和操作

作者头像
用户6543014
发布2019-12-02 22:21:05
1.8K0
发布2019-12-02 22:21:05
举报
文章被收录于专栏:CU技术社区CU技术社区

在开始使用命令和操作之前,让我们首先了解Git的主要动机。Git的目的是管理随着时间变化的项目或文件集。Git将此信息存储在称为Git存储库的数据结构中。该存储库是Git的核心。

需要说明的是,Git存储库是存储所有项目文件和相关元数据的目录。Git通过根据索引创建树形图来记录项目的当前状态,并且通常采用有向无环图(DAG)的形式。

现在您已经了解了Git的目标,让我们继续了解操作和命令。

Git教程:操作和命令Git中的一些基本操作是:

  1. 初始化ini
  2. 增加内容
  3. 提交内容
  4. Pull
  5. Push

一些高级Git操作是:

  1. 管理分支
  2. 合并分支
  3. Rebasing

首先让我简要介绍一下这些操作在Git存储库中的工作方式。看看下面的Git架构:

如果您不了解上面的图表,不必担心。我将在本Git教程中详细解释这些操作。让我们从基本的操作开始。

您首先需要在系统上安装Git。

我将向您展示使用Git Bash的命令和操作。Git Bash是一个纯文本命令行界面,用于在Windows上使用Git,并提供了运行自动化脚本的功能。

在Windows系统中安装Git之后,只需打开要存储所有项目文件的文件夹/目录即可;右键点击并选择“Git Bash Here“。

这将打开Git Bash终端,您可以在其中输入命令以执行各种Git操作命令。

现在,下一个任务是初始化存储库。

初始化

为此,我们使用git init命令,请参考以下截图。

git init创建一个空的Git存储库或重新初始化一个现有的存储库。它创建了一个带有子目录和模板文件的.git目录。在现有存储库中运行git init不会覆盖已经存在的内容,它会选择新添加的模板。

现在我的存储库已初始化,现在让我在目录/存储库中创建一些文件。例如,我创建了两个文本文件,即edureka1.txt和edureka2.txt。

让我们使用git status命令查看这些文件是否在我的索引中,索引保存工作树/目录的内容的快照,并将该快照作为本地存储库中进行下一次更改的内容。

Git Status

该命令列出了所有准备好添加到本地存储库的修改文件。

让我们输入命令以查看会发生什么:

这表明我有两个文件尚未添加到索引中。这意味着除非在索引中显式添加了这些文件,否则无法提交对这些文件的更改。

增加内容

该命令使用在工作树中找到的当前内容来更新索引,然后在临时区域中准备下一次提交的内容。

因此,在更改工作树之后,在运行commit命令之前,必须使用add命令将所有新文件或已修改的文件添加到索引中。为此,请使用以下命令:

git add

或者是

git add

让我为您演示git add命令,以便您可以更好地理解它。

我还创建了两个文件edureka3.txt和edureka4.txt。让我们使用命令git add -A添加文件。此命令会将所有文件添加到索引中,这些文件位于目录中,但尚未在索引中更新。

现在,新文件已添加到索引中,您可以提交它们了。

提交内容

它是指在给定时间记录存储库的快照。除非明确完成,否则已提交的快照将永远不会更改。让我解释一下commit如何与下图一起工作:

C1是初始提交,即第一个更改的快照,并使用名为C2的更改从中创建另一个快照。请注意,主服务器指向最新提交。

现在,当我再次提交时,将创建另一个快照C3,现在主快照指向C3,而不是C2。

Git旨在使commit尽可能轻量级。因此,它不会每次都盲目复制整个目录;它包括作为一组commit的提交,或一个版本的“增量”。简单来说,它仅复制在存储库中所做的更改。

您可以使用以下命令进行提交:

git commit

这将提交暂存的快照,并将启动文本编辑器提示您提交消息。

或者您可以使用:

git commit -m“ <消息>”

让我们尝试一下。

如您在上面看到的,git commit命令已经在本地存储库中的四个文件中提交了更改。

现在,如果要一次性提交工作目录中所有更改的快照,可以使用以下命令:

git commit -a

我在工作目录中又创建了两个文本文件 edureka5.txt和edureka6.txt,但它们尚未添加到索引中。

我正在使用以下命令添加edureka5.txt:

git add edureka5.txt

我已将edureka5.txt明确添加到索引中,但没有将edureka6.txt添加到索引中,并在先前的文件中进行了更改。我想一次提交目录中的所有更改。请参考下面的快照:

该命令将提交工作目录中所有更改的快照,但仅包括对跟踪文件的修改,即,在历史记录中的某个时刻使用git add添加的文件。因此,edureka6.txt未提交,因为尚未将其添加到索引中。但是所有先前文件都提交了,即edureka1.txt、edureka2.txt、edureka3.txt、edureka4.txt和edureka5.txt。

现在,我已经在本地存储库中进行了所需的提交。

请注意,在影响对中央存储库的更改之前,应始终将更改从中央存储库拉到本地存储库,以更新已对中央存储库做出贡献的所有协作者的工作。为此,我们将使用pull命令。

pull

命令git pull将更改从远程存储库提取到本地存储库。它合并了本地存储库中的上游更改,这是基于Git的协作中的常见任务。

但是首先,您需要使用以下命令将中央存储库设置为原始存储库:

git remote add origin <中央存储库的链接>

Git Add Remote Origin现在已经设置了origin,让我们使用pull从origin提取文件。为此,请使用命令:

git pull origin master

此命令会将所有文件从远程存储库的master分支复制到本地存储库。

Git Pull Origin Master由于我的本地存储库已经使用master分支中的文件进行了更新,因此该消息已经是最新的。请参考上面的屏幕截图。

注意:也可以尝试使用以下命令从其他分支提取文件:

git pull origin <分支名称>

现在,您的本地Git存储库已使用所有最近的更改进行了更新。是时候使用push命令在中央存储库中进行更改了

Push

此命令将从本地存储库提取到远程存储库。它与pull操作相反。

拉入导入将提交到本地存储库,而拉入导出将提交到远程存储库。

git push的用途是将本地更改发布到中央存储库。积累了多个本地提交并准备与团队其他成员共享之后,可以使用以下命令将其推送到中央存储库:

git push <远程>

注意:该远程服务器是指在使用pull命令之前已设置的远程存储库。

这将把更改从本地存储库提取到远程存储库,以及所有必要的提交和内部对象,在目标存储库中创建一个本地分支。

让我向您演示一下

上面的文件是我们先前在commit部分中已经提交的文件,它们都是“ push-ready”。我将使用命令git push origin master来将这些文件反映在中央存储库的master分支中。

现在让我们检查更改是否发生在我的中央存储库中。

为了防止覆盖,当Git在目标存储库中导致non-fast forward merge时,它不允许push。

注意:non-fast forward merge是指上游合并,即与子分支的祖先或父分支合并。

要启用这种合并,请使用以下命令:

git push <远程> –force

上面的命令将强制执行push操作,即使它导致non-fast forward merge。

至此,我希望您对基本的Git命令有一个很好的了解。现在,让我们更进一步,学习如何在Git中进行分支和合并。

分支

Git中的分支不过是指向特定提交的指针,Git通常更喜欢保持其分支尽可能轻量级。

基本上有两种类型的分支,即本地分支和远程跟踪分支。

本地分支只是您的工作树的另一条路径。另一方面,远程跟踪分支有特殊用途。他们之中有一些是:

他们将您的工作从本地存储库链接到中央存储库上的工作。

当您使用git pull时,它们会自动检测要从哪个远程分支获取更改。

您可以使用以下命令检查当前分支是什么:

git branch

分支时您应该始终高呼的一句口号是“早分支,并经常分支”

要创建一个新分支,我们使用以下命令:

git branch <分支名称>

在Git中创建分支工作流

在Git中创建分支工作流上图显示了创建新分支时的工作流。当我们创建一个新分支时,它源自master分支本身。

由于创建多个分支没有存储/内存开销,因此逻辑上划分您的工作比拥有大块的分支更容易。

现在,让我们看看如何使用分支进行提交。

正如您在上图中所看到的,newBranch已与主服务器分离,因此将创建一条不同的路径。

使用以下命令:

git checkout <branch_name>,然后

git commit

在Git分支在这里,我创建了一个名为“ EdurekaImages”的新分支,并使用命令git checkout切换到该新分支。

上述命令的一种快捷方式是:

git checkout -b [branch_name]

此命令将创建一个新分支,并同时签出新分支。

现在,当我们在分支EdurekaImages中时,使用以下命令

git add edureka6.txt

git commit -m” adding edureka6.txt”

合并分支

合并是将不同分支的工作结合在一起的方法。这将使我们能够分支、开发新功能,然后将其重新组合。

在Git中合并工作流上图为我们展示了两个不同的分支-> newBranch和master。现在,当我们将newBranch的工作合并到master中时,它将创建一个新commit,其中包含master和newBranch的所有工作。

现在,让我们使用下面的命令合并两个分支:

git merge <分支名称>

重要的是要知道上述命令中的分支名称应该是您要合并到当前要签出的分支中的分支。因此,请确保您已在目标分支中签出。

现在,让我们合并所有的工作分支EdurekaImages到主分支。为此,我将首先使用git checkout master命令检出主分支,并使用git merge EdurekaImages命令合并EdurekaImages。

Git合并如上所示,分支名称中的所有数据都合并到master分支中。现在,文本文件edureka6.txt已添加到master分支中。

在Git中合并会创建一个特殊的提交,该提交具有两个唯一的父进程。

Rebasing

这也是组合不同分支之间的工作的一种方式。Rebasing接受一组提交,将其复制,然后将其存储在存储库之外。

Rebasing的优点是它可以用于生成线性的提交序列。如果进行了重设,则提交日志或存储库的历史记录将保持干净。

让我们看看它是如何发生的。

现在,我们在newBranch上的工作紧随master之后,我们有了不错的线性提交序列。

注意:重新设置基准还可以防止上游合并,这意味着您不能将master放在newBranch之后。

现在,要重新设置主数据库,请在Git Bash中键入以下命令:

git rebase master

此命令会将我们的所有工作从当前分支移至主分支。它们看起来好像是顺序开发的,但是却是并行开发的。

提示与技巧

现在,您已经完成了Git中的所有操作,这里是您应该知道的一些提示和技巧。

归档存储库使用以下命令:

git archive master –format = zip –output = ../name-of-file.zip

它将所有文件和数据存储在一个zip文件中,而不是.git目录中。

请注意,这仅创建一个快照,完全忽略了版本控制。当您要将文件发送给未在计算机上安装Git的客户端进行审核时,这非常方便。

打包存储库它将存储库转换为单个文件。

使用以下命令-

git bundle create ../repo.bundler master

这会将master分支推送到仅包含在文件中而不是存储库中的远程分支。

一种替代方法是:

cd..

git clone repo.bundle repo-copy -b master

cd repo-copy

git log

cd.. /my-git-repo

隐藏未提交的更改git status

git stash

git status

当您要重新应用“stash”ed的更改时,请使用以下命令:

git stash apply

就是这样,伙计们!希望您喜欢这个Git教程,并学习了其中的命令和操作!

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-11-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 SACC开源架构 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
文件存储
文件存储(Cloud File Storage,CFS)为您提供安全可靠、可扩展的共享文件存储服务。文件存储可与腾讯云服务器、容器服务、批量计算等服务搭配使用,为多个计算节点提供容量和性能可弹性扩展的高性能共享存储。腾讯云文件存储的管理界面简单、易使用,可实现对现有应用的无缝集成;按实际用量付费,为您节约成本,简化 IT 运维工作。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档