Git教程 - Git 命令与操做

【注】本文译自:https://www.edureka.co/blog/g...
  学习 Git 与使用该工具同样容易。这个 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 命令行。app

一些操做和命令

  Git中的一些基本操做有:编辑器

  1. Initialize (初始化)
  2. Add (添加)
  3. Commit (提交)
  4. Pull (拉取)
  5. Push (推送)

  一些高级的 Git 操做有:工具

  1. Branching (分支)
  2. Merging (合并)
  3. Rebasing (变基)

  首先让我简要介绍一下这些操做如何与 Git 存储库一块儿使用。看看下面的Git架构:

  若是您已经理解了上面的图,那很好,可是若是您不了解,则没必要担忧,我将在本教程中逐一解释这些操做。让咱们从基本的操做开始。
  您须要先在系统上安装Git。若是您须要安装方面的帮助,请单击此处学习

Git Bash 的用途是什么?

  本 Git Bash 教程重点介绍可在 Git Bash 上使用的命令和操做。spa

如何浏览 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 中的命令和操做。

相关文章
相关标签/搜索