相关疑难解决方法(0)

在Git中,HEAD,工作树和索引之间有什么区别?

有人能告诉我在Git中HEAD,工作树和索引之间的区别吗?

据我所知,它们都是不同分支的名称.我的假设是否正确?


编辑

我找到了这个

单个git存储库可以跟踪任意数量的分支,但是您的工作树只与其中一个分支相关联("当前"或"已检出"分支),HEAD指向该分支.

这是否意味着HEAD和工作树总是一样的?

git version-control

453
推荐指数
5
解决办法
13万
查看次数

Git结帐并合并而不触及工作树

假设我有一个功能分支,在推送我的更改之前我将上游更改合并到其中:

git branch feature1
... [edit my code]
... [commit]
git fetch origin master
git merge fetch_head [or rebase]
... [resolve conflicts]
... [build and test code]
Run Code Online (Sandbox Code Playgroud)

在这一点上,我希望推动我的改变.这样做的正常方法是:

git checkout master [changes a bunch of working tree files]
git merge feature1  [changes the same files right back]
Run Code Online (Sandbox Code Playgroud)

这工作正常,但会使(日期检查)编译器认为一大堆文件是脏的,即使内容相同也需要重建.在这种情况下,有没有办法结帐并使工作树保持不变?

就像是:

git checkout master --merge-branch feature1
Run Code Online (Sandbox Code Playgroud)

编辑:

我只谈论快速合并,根据定义,它不会改变文件的状态.

git

23
推荐指数
2
解决办法
1万
查看次数

合并而不更改工作目录

我有以下场景:

* ab82147 (HEAD, topic) changes
* 8993636 changes
* 82f4426 changes
* 18be5a3 (master) first
Run Code Online (Sandbox Code Playgroud)

我想(非快进)合并topicmaster.这需要我:

  • git checkout master
  • git merge --no-ff topic

但是检查master,然后将主题合并到它会导致git更改我的工作目录(虽然最终结果与检查master之前的结果相同),而我遇到的问题是由于我们项目的大小,构建它需要大约30分钟(使用IncrediBuild)虽然没有真正改变,但它简直无法忍受.

所以我想得到的是以下内容:

*   9075cf4 (HEAD, master) Merge branch 'topic'
|\  
| * ab82147 (topic) changes
| * 8993636 changes
| * 82f4426 changes
|/  
* 18be5a3 first
Run Code Online (Sandbox Code Playgroud)

没有真正触及工作目录(或至少以某种方式欺骗git).

git

16
推荐指数
1
解决办法
4886
查看次数

git checkout感到困惑

我是git的新手,并试图围绕分支的工作方式.根据文档git checkout

更新工作树中的文件以匹配索引或指定树中的版本.如果>没有给出路径,git checkout也会更新HEAD以将指定的分支设置为>当前分支.

所以据我所知,我工作的目录中的文件(我执行git init的文件)应该根据我所在的分支进行更改.我很困惑,因为当我在分支之间切换时不会发生这种情况.在切换分支之前我正在编辑的编辑存在于我切换到的分支中.我做错了什么或git checkout不能这样工作,我只是误解了文档?

git

4
推荐指数
2
解决办法
2699
查看次数

标签 统计

git ×4

version-control ×1