在Git命令中使用origin

时间:2015-10-23 02:51:44

标签: git

我是Git的新手并且有一个问题。这两个命令似乎是common pairing

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

如果我的目标是将本地克隆重置为干净状态,那么它与以下任何一种有什么不同?

git reset --hard origin/master
# no fetch

或者

origin

如果我们要直接指定遥控器,似乎首先需要取出。我误会了什么吗?这是一个有目的的惯例,还是没有基础的传统/习惯?

为什么我要问:

我正在为构建机器编写脚本。我想在一个时间点获取所有内容,然后在构建期间从本地内容开始工作,这样就不可能在构建过程中进行部分更改。好像我想要从遥控器中取一次,然后在命令中不指定function enable_add(tag, type){return function(e){add_element(e, tag, type);};} //Function call for adding new elements document.getElementById("body_visual_editor").addEventListener("click", enable_add(tag, type)); document.getElementById("body_visual_editor").removeEventListener("click", enable_add()); 。但是,我很难在网上找到相关的例子,所以我不确定是否有遗漏的东西。

1 个答案:

答案 0 :(得分:2)

首先是远程分支的基础知识。您的存储库看起来像这样。

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

masterorigin/master都是分支,它们只是指向提交的标签。在这种情况下,自上次获取以来,您已对master进行了两次提交。

除非你告诉它,否则Git不会与网络通话。它跟踪上次使用"远程分支"查看远程存储库的时间。 origin/master是一个"远程分支"。它是您上次masterorigin运行时更新的名为git fetch origin的远程git fetch --all分支的本地副本(或git pull取)。

git reset --hard origin/master

这用于丢弃所有本地作品。这会将当前分支和工作目录重置为origin/master所在的位置,即CDE将会丢失。

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

git reset --hard origin/master

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

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

要抛弃未提交的更改,更安全的操作是git reset --hard HEADHEAD是指向当前检出的提交的指针。无论你在哪个分支,它都会有效。我把它别名为clear

  

我希望在一个时间点获取所有内容,然后在构建期间使用本地内容进行操作,这样就无法在构建过程中进行部分更改。

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

如果您在构建开始时获取并结帐,那么您会没事的。如果您需要重置为干净状态,则可以运行git reset --hard HEAD。您可能还希望运行git clean -dxf,这将丢弃任何未跟踪或忽略的文件,如构建工件。