Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
git重置头文件名的作用是什么?_Git_Git Merge_Git Commit - Fatal编程技术网

git重置头文件名的作用是什么?

git重置头文件名的作用是什么?,git,git-merge,git-commit,Git,Git Merge,Git Commit,我在branch-B上,我正在尝试将branch-A合并到branch-B,但我想合并所有更改,除了一个文件。经过一些搜索,我找到了以下解决方案: git merge --no-commit <merge-branch> git reset HEAD myfile.txt git checkout -- myfile.txt git commit -m "merged <merge-branch>" git合并--不提交 git重置头myfile.txt git签出——

我在branch-B上,我正在尝试将branch-A合并到branch-B,但我想合并所有更改,除了一个文件。经过一些搜索,我找到了以下解决方案:

git merge --no-commit <merge-branch>
git reset HEAD myfile.txt
git checkout -- myfile.txt
git commit -m "merged <merge-branch>"
git合并--不提交
git重置头myfile.txt
git签出——myfile.txt
git提交-m“合并”

我对第二行感到非常困惑:
git reset HEAD myfile.txt
;这条线是干什么的?它如何帮助实现合并除一个文件之外的所有文件的目标

它将其重置为当前分支的头(头)上的内容。

它将其重置为当前分支的头(头)上的内容。

您有一个文件,您希望该文件不受合并的影响。但是文件实际上可能会受到合并的影响。因此,您执行了合并,但没有声明它已完成就停止了

git merge --no-commit <merge-branch>
git commit -m "merged <merge-branch>"
现在宣布合并完成

git merge --no-commit <merge-branch>
git commit -m "merged <merge-branch>"
git提交-m“合并”

您有一个文件,希望该文件不受合并的影响。但是文件实际上可能会受到合并的影响。因此,您执行了合并,但没有声明它已完成就停止了

git merge --no-commit <merge-branch>
git commit -m "merged <merge-branch>"
现在宣布合并完成

git merge --no-commit <merge-branch>
git commit -m "merged <merge-branch>"
git提交-m“合并”

使用
git reset
时要记住的一点是
git
跟踪两组文件:

  • 您的“工作树”,即您直接编辑的签出文件
  • “索引”或“暂存区”,即下次运行
    git commit
    时将提交的文件,通常使用
    git add
    git rm
    进行管理
它还跟踪您当前签出的提交以及哪个分支

git reset
具有各种模式和参数

当使用一个或多个路径以及分支或提交引用(如
git
手册所述,任何“树型”文件)指定时,
git reset
将索引/暂存区域中的这些文件设置为提交时的状态,但不接触工作副本或分支指针

最后,
HEAD
指的是您当前签出的任何提交

因此,在本例中,
git reset HEAD myfile.txt
将索引更改为“下次提交时,请使
myfile.txt
的内容与当前签出的提交中的内容相同”。换句话说,您不想提交对该文件的任何更改

git reset HEAD myfile.txt
git checkout -- myfile.txt

下一行(
git checkout--myfile.txt
)对工作树执行相同的操作。如果在这两者之间运行
git status
,您将看到对
myfile.txt
的所有更改都列为“未老化”。

使用
git reset
时要记住的是
git
跟踪两组文件:

  • 您的“工作树”,即您直接编辑的签出文件
  • “索引”或“暂存区”,即下次运行
    git commit
    时将提交的文件,通常使用
    git add
    git rm
    进行管理
它还跟踪您当前签出的提交以及哪个分支

git reset
具有各种模式和参数

当使用一个或多个路径以及分支或提交引用(如
git
手册所述,任何“树型”文件)指定时,
git reset
将索引/暂存区域中的这些文件设置为提交时的状态,但不接触工作副本或分支指针

最后,
HEAD
指的是您当前签出的任何提交

因此,在本例中,
git reset HEAD myfile.txt
将索引更改为“下次提交时,请使
myfile.txt
的内容与当前签出的提交中的内容相同”。换句话说,您不想提交对该文件的任何更改

git reset HEAD myfile.txt
git checkout -- myfile.txt
下一行(
git checkout--myfile.txt
)对工作树执行相同的操作。如果您在这两者之间运行一个
git status
,您将看到对
myfile.txt
的所有更改都列为“未分级”。

并且都是正确的(我已经对它们进行了升级),但是除非您已经阅读了git的索引/分级区域的功能,否则其中的一些部分有些模糊。事实上,如果不深入了解索引的一些细节,就无法正确解释合并的过程,
git reset
的主要工作是操作索引。那么:确切地说,索引是什么?为什么它有三个名称?首先,非常简单地看一下提交是很有用的

Git提交是每个源文件的冻结快照,外加一些元数据 当您进行Git提交时,您真正做的是始终冻结所有文件的副本(好的,所有提交的文件,但这是一种重复)。commit还存储您的姓名和电子邮件地址,以及一个日期和时间戳,每个日期和时间戳有两个,还有一些我们在这里忽略的其他有用的东西,以便集中精力处理每个文件的冻结副本

显然,如果Git每次只是为每个文件创建一个新副本,那么您的Git存储库将很快变得非常庞大。所以Git不会这么做。每个冻结的文件首先被压缩成只读的Git格式。以这种方式存储的数据永远不会更改,事实上也无法更改。它只是存储在一个大数据库中(Git的对象数据库,这里我们可以忽略它)。这意味着一旦提交了文件,您的文件将一直保存在此表单中,如果您需要它们,这是很好的。但是,如果文件的冻结、压缩、只读、Git-only数据与(或任何)早期提交中的数据相同,这也意味着Git可以重新使用早期保存的文件,而不是保存新的副本。由于大多数提交不会更改大多数文件,因此很容易节省大量空间

冷冻对于获得食物是好的,但是对于食物是无用的