共计 5934 个字符,预计需要花费 15 分钟才能阅读完成。
【注】本文译自:https://www.edureka.co/blog/g…
学习 Git 与应用该工具一样容易。这个 Git 教程的目标就是要把这个难题从您的脑海中剔除。我置信,通过这个 Git 教程,您将理解到所有的概念。
我心愿您曾经理解了 Git 的基本概念和术语,并在我的 Git 教程系列的第一个博客中理解了无关版本控制的所有常识。
在本教程中,您将学习:
- Git 命令
- Git 操作
- 还有一些应用 Git 无效地治理我的项目的提醒和技巧。
在开始应用命令和操作之前,让咱们首先了解 Git 的次要目标。
Git 的目标是治理一个我的项目或一组随着工夫变动的文件。Git 将这些信息存储在称为 Git 存储库的数据结构中。存储库是 Git 的外围。
如何查看我的 GIT 存储库?
明确地说,Git 存储库是寄存所有我的项目文件和相干元数据的目录。
Git 通过从索引中创立树形图来记录我的项目的以后状态。它通常采纳有向无环图(DAG)的模式存在。
当初您曾经了解解了 Git 的指标,让咱们持续探讨操作和命令。
如何学习 Git 命令?
Git 工作原理的根本概述:
- 应用 git 托管工具(如 Bitbucket)创立“存储库”(我的项目)
- 将存储库复制(或克隆)到本地计算机
- 将文件增加到本地存储库并“提交”(保留)更改
- 将更改“推送”到主分支
- 应用 git 托管工具对文件进行更改并提交
- 将更改“拉”到本地计算机
- 创立一个“分支”(版本),进行更改,而后提交更改
- 关上一个“拉取申请”。
- 将您的分支“合并”到主分支
Git Shell 和 Git Bash 有什么区别?
Git Bash 和 Git Shell 是两个不同的命令行程序,可让您与底层的 Gi t 程序进行交互。Bash 是基于 Linux 的命令行,而 Shell 是本机 Windows 命令行。
一些操作和命令
Git 中的一些基本操作有:
- Initialize(初始化)
- Add(增加)
- Commit(提交)
- Pull(拉取)
- Push(推送)
一些高级的 Git 操作有:
- Branching(分支)
- Merging(合并)
- Rebasing(变基)
首先让我简要介绍一下这些操作如何与 Git 存储库一起应用。看看上面的 Git 架构:
如果您曾经了解了下面的图,那很好,然而如果您不理解,则不用放心,我将在本教程中逐个解释这些操作。让咱们从根本的操作开始。
您须要先在零碎上装置 Git。如果您须要装置方面的帮忙,请单击此处。
Git Bash 的用处是什么?
本 Git Bash 教程重点介绍可在 Git Bash 上应用的命令和操作。
如何浏览 Git Bash?
在 Windows 零碎中装置 Git 之后,只需关上要存储所有我的项目文件的文件夹 / 目录即可;右键单击并抉择“Git Bash Here”。
这将关上 Git Bash 终端,您能够在其中输出命令以执行各种 Git 操作。
当初,下一个工作是初始化存储库。
初始化(Initialize)
为此,咱们应用命令 git init。请参考上面的截图。
git init 创立一个空的 Git 存储库或从新初始化一个现有的存储库。它基本上会创立一个带有子目录和模板文件的 .git 目录。在现有存储库中运行 git init 不会笼罩曾经存在的内容。它会抉择新增加的模板。
当初我的存储库已初始化,当初让我在目录 / 存储库中创立一些文件。例如我创立了两个文本文件,即 edureka1.txt 和 edureka2.txt。
让咱们应用 git status 命令查看这些文件是否在我的索引中。索引保留工作树 / 目录的内容的快照,该快照将作为本地存储库中要进行的下一次更改的内容。
Git status
git status 命令列出了所有筹备好增加到本地存储库的已批改文件。
让咱们输出命令,看看会产生什么:
这表明我有两个文件尚未增加到索引中。这意味着除非在索引中显式增加了这些文件,否则无奈提交对这些文件的更改。
增加(Add)
该命令应用在工作树中找到的以后内容来更新索引,而后在长期区域中筹备下一次提交的内容。
因而,在更改工作树之后,并且在运行 commit 命令之前,必须应用 add 命令将所有新文件或已批改的文件增加到索引中。为此,请应用以下命令:
git add <directory>
或
git add <file>
让我为您演示 git add,以便您能够更好地了解它。
我还创立了两个文件 edureka3.txt 和 edureka4.txt。让咱们应用命令 git add -A 增加文件。此命令会将所有目录中的文件增加到索引中,但尚未在索引中更新。
当初,新文件已增加到索引中,您能够提交它们了。
提交(Commit)
它指的是在给定工夫记录存储库的快照。提交的快照永远不会扭转,除非电焊工地实现。让我用下图来解释一下 commit 是如何工作的:
这里,C1 是初始提交,即第一个更改的快照,从该更改创立另一个名为 C2 的快照。请留神,主节点指向最新的提交。
当初,当我再次提交时,将创立另一个快照 C3,当初主快照指向 C3,而不是 C2。
Git 的 指标是使提交尽可能轻量。因而,它不会每次提交时都自觉复制整个目录;它包含作为一组更改的提交,或从一个版本的存储库到另一个版本的“增量”。简略来说,它只复制在存储库中所做的更改。
您能够应用以下命令提交:
git commit
这将提交暂存的快照,并将启动文本编辑器,提醒您输出提交音讯。
或者您能够应用:
git commit -m“<message>”
让咱们尝试一下。
如您在下面看到的,git commit 命令曾经提交了本地存储库中四个文件中的更改。
当初,如果要一次提交工作目录中所有更改的快照,则能够应用以下命令:
git commit -a
我在工作目录 viz 中又创立了两个文本文件。edureka5.txt 和 edureka6.txt,但它们尚未增加到索引中。
我正在应用命令增加 edureka 5.text:
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 < 地方存储库的链接 >
当初曾经设置了原点,让咱们应用 pull 从原点提取文件。为此,请应用命令:
git pull origin master
此命令会将所有文件从近程存储库的 master 分支复制到本地存储库。
因为我的本地存储库曾经应用 master 分支中的文件进行了更新,因而该音讯曾经是最新的。请参阅下面的屏幕截图。
留神: 也能够尝试应用以下命令从其余分支提取文件:
git pull origin <branch-name>
当初,您的本地 Git 存储库已应用所有最近的更改进行了更新。当初是时候应用 push 命令在地方存储库中进行更改了。
推送(Push)
此命令将提交从本地存储库传输到近程存储库。它与拉取操作相同。
将导入提交到本地存储库,而将导出将提交到近程存储库。
git push 的用处是将本地更改公布到地方存储库。积攒了多个本地提交并筹备与团队其余成员共享之后,能够应用以下命令将其推送到地方存储库:
git push < 近程 >
注:该近程援用在应用 pull 命令之前设置的近程存储库。
这将把更改从本地存储库推送到近程存储库,以及所有必要的提交和外部对象。并将在指标存储库中创立一个本地分支。
我来为您演示一下。
下面的文件是咱们之前在 commit 局部中曾经提交的文件,它们都是“push-ready”的。我将应用命令 git push origin master 来将这些文件反映在地方存储库的 master 分支中。
当初让咱们查看这些更改是否产生在我的地方存储库中。
是的,的确如此。:-)
为了避免笼罩,当 Git 在指标存储库中导致非快进合并时,它不容许推送。
留神: 非快进合并是指上游合并,即与子分支的先人或父分支合并。
要启用这种合并,请应用以下命令:
git push <remote> –force
下面的命令将强制执行推操作,即便它会导致非快进合并。
到目前为止,我心愿您曾经理解了 Git 的根本命令。当初,让咱们进一步学习在 Git 中进行分支和合并。
分支(Branching)
Git 中的分支只是指向特定提交的指针。Git 通常更偏向于放弃其分支尽可能轻量级。
基本上有两种类型的分支,即 本地分支 和近程跟踪分支。
本地分支只是您的工作树的另一条门路。另一方面,近程跟踪分支有非凡用处。其中一些是:
- 他们将您的工作从本地存储库链接到地方存储库上的工作。
- 当您应用 git pull 时,它们会自动检测要从哪个近程分支获取更改。
您能够应用以下命令查看以后分支是什么:
git branch
分支时您应该常常念诵的口号是“早分支,常分支”。
要创立一个新分支,咱们应用以下命令:
git branch <branch-name>
上图显示了创立新分支时的工作流程。当咱们创立一个新分支时,它源自 master 分支自身。
因为创立多个分支没有存储 / 内存开销,因而逻辑上划分您的工作比领有大块的分支要容易得多。
分支包含特定提交和所有父提交的工作。如您在上图中所看到的,newBranch 已与主服务器拆散,因而将创立一条不同的门路。
应用以下命令:
git checkout <branch_name> 而后执行
git commit
当初,让咱们看看如何应用提交分支。
分支包含特定提交和所有父提交的工作。如您在上图中所看到的,newBranch 已与主服务器拆散,因而将创立一条不同的门路。
应用以下命令:
git checkout <branch_name> 而后执行
git commit
在这里,我创立了一个名为“ EdurekaImages”的新分支,并应用命令 git checkout 切换到该新分支。
上述命令的一种快捷方式是:
git checkout -b[branch_name]
此命令将创立一个新分支并同时签出新分支。
当初,当咱们在分支 EdurekaImages 中时,应用以下命令增加并提交文本文件 edureka6.txt:
git add edureka6.txt
git commit -m “adding edureka6.txt”
合并(Merging)
合并是将不同分支的工作合并在一起的办法。这将容许咱们进行分支,开发新性能,而后将其合并回来。
上图为咱们展现了两个不同的分支 -> newBranch 和 master。当初,当咱们将 newBranch 的工作合并到 master 中时,它将创立一个新提交,其中蕴含 master 和 newBranch 的所有工作。
当初,让咱们应用上面的命令合并两个分支:
git merge <branch_name>
上述命令中的分支名称应该是你想要合并到以后所签出分支的分支。因而,请确保您已在指标分支中检出。
当初,让咱们将分支 EdurekaImages 的所有工作合并到 master 分支中。为此,我将首先应用 git checkout master 命令检出 master 分支,而后用 git merge EdurekaImages 命令合并 EdurekaImages。
如上所示,分支名称中的所有数据都合并到了 master 分支中。当初,文本文件 edureka6.txt 已增加到 master 分支中。
在 Git 中合并会创立一个非凡的提交,该提交具备两个惟一的父级。
变基(Rebasing)
这也是组合不同分支之间的工作的一种形式。变基承受一组提交,将其复制并存储在您的存储库内部。
变基的长处是它能够用于制作线性的提交序列。如果实现了从新基准化,则提交日志或存储库的历史记录将放弃洁净。
让咱们看看它是如何产生的:
当初,咱们在 newBranch 上的工作紧随 master 之后,咱们有了不错的线性提交序列。
留神: 从新设置基准还能够避免上游合并,这意味着您不能将 master 放在 newBranch 之后。
当初,要重设 master,请在 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**
当您要从新利用“暗藏”的更改时,请应用以下命令:
git stash apply
我心愿您喜爱这个 Git Bash 教程,并学习了 Git 中的命令和操作。