我是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());
。但是,我很难在网上找到相关的例子,所以我不确定是否有遗漏的东西。
答案 0 :(得分:2)
首先是远程分支的基础知识。您的存储库看起来像这样。
A - B - C [origin/master]
\
D - E [master]
master
和origin/master
都是分支,它们只是指向提交的标签。在这种情况下,自上次获取以来,您已对master
进行了两次提交。
origin/master
是一个"远程分支"。它是您上次master
或origin
运行时更新的名为git fetch origin
的远程git fetch --all
分支的本地副本(或git pull
取)。
git reset --hard origin/master
这用于丢弃所有本地作品。这会将当前分支和工作目录重置为origin/master
所在的位置,即C
。 D
和E
将会丢失。
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 HEAD
。 HEAD
是指向当前检出的提交的指针。无论你在哪个分支,它都会有效。我把它别名为clear
。
除非你告诉它,否则Git不会与网络对话。有两个命令会更新您的本地存储库我希望在一个时间点获取所有内容,然后在构建期间使用本地内容进行操作,这样就无法在构建过程中进行部分更改。
git fetch
和git pull
(执行获取)。如果您不运行这些,您的origin/
远程分支将不会更改。
如果您在构建开始时获取并结帐,那么您会没事的。如果您需要重置为干净状态,则可以运行git reset --hard HEAD
。您可能还希望运行git clean -dxf
,这将丢弃任何未跟踪或忽略的文件,如构建工件。