在Git命令中使用origin

在Git命令中使用origin,git,Git,我是Git的新手,有个问题。这两个命令似乎是: 如果我的目标是将本地克隆重置为干净状态,那么这与以下两种情况有何不同 git fetch --all git reset --hard master # no origin 或 如果我们要直接指定远程设备,似乎不需要先获取。我是不是误解了什么?这是一个有目的的公约还是一个没有基础的传统/习惯 为什么我要问: 我正在为一台构建机器编写脚本。我希望在一个时间点获取所有内容,然后在构建期间从本地内容开始工作,这样就不可能在构建过程中进行部分更改。似乎我

我是Git的新手,有个问题。这两个命令似乎是:

如果我的目标是将本地克隆重置为干净状态,那么这与以下两种情况有何不同

git fetch --all
git reset --hard master
# no origin

如果我们要直接指定远程设备,似乎不需要先获取。我是不是误解了什么?这是一个有目的的公约还是一个没有基础的传统/习惯

为什么我要问:


我正在为一台构建机器编写脚本。我希望在一个时间点获取所有内容,然后在构建期间从本地内容开始工作,这样就不可能在构建过程中进行部分更改。似乎我想从远程获取一次,然后在命令中不指定
origin
。然而,我很难在网上找到这样的例子,所以我不确定我是否遗漏了什么。

首先是远程分支的基础知识。您的存储库如下所示

A - B - C [origin/master]
         \
          D - E [master]
master
origin/master
都是分支,它们只是指向提交的标签。在本例中,自上次获取以来,您已经向
master
提交了两次

Git不会与网络对话,除非你告诉它。它跟踪上次查看带有“远程分支”的远程存储库的时间<代码>源代码/主代码是一个“远程分支”。它是上次运行
git-fetch-origin
git-fetch-all
时更新的名为
origin
的远程上的
master
分支的本地副本(或执行提取的
git-pull


这是用来扔掉你所有的本地工作的。这会将当前分支和工作目录重置为
origin/master
所在的位置,即
C
<代码>D和
E
将丢失

A - B - C [origin/master]
         \
          D - E [master]

git reset --hard origin/master

A - B - C [origin/master]
          [master]

这会将当前分支和工作目录重置回
master
。如果您恰好在
master
上,这将撤消您未提交的工作。但是如果你在另一个分支上,你只是吹走了你的分支

要扔掉未提交的更改,更安全的做法是
git reset--hard HEAD
HEAD
是指向当前签出提交的指针。不管你在哪个部门,它都会起作用。我把它化名为
clear


我希望在一个时间点获取所有内容,然后在构建期间从本地内容开始工作,这样就不可能在构建过程中进行部分更改

Git不会与网络对话,除非你告诉它。有两个命令将更新您的本地存储库,
git fetch
git pull
(执行提取)。如果不运行这些分支,您的
origin/
远程分支将不会更改


如果您在构建开始时获取并签出,您将很好。如果需要重置为干净状态,可以运行
git reset--hard HEAD
。您可能还想运行
git clean-dxf
,它将抛出任何未跟踪或忽略的文件,如构建工件。

因此我确实误解了使用
origin/
,这句话为我澄清了这一点:“
origin/master
是一个“远程分支”。它是远程上
master
分支的本地副本”。我想那是遥远的。谢谢为便于将来参考,
origin/master
master
都是本地分支,它们是不同的。实际上,更新本地
origin/master
分支需要提取。
A - B - C [origin/master]
         \
          D - E [master]
git reset --hard origin/master
A - B - C [origin/master]
         \
          D - E [master]

git reset --hard origin/master

A - B - C [origin/master]
          [master]
git reset --hard master