git重置头文件名的作用是什么?
我在branch-B上,我正在尝试将branch-A合并到branch-B,但我想合并所有更改,除了一个文件。经过一些搜索,我找到了以下解决方案: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签出——
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可以重新使用早期保存的文件,而不是保存新的副本。由于大多数提交不会更改大多数文件,因此很容易节省大量空间
冷冻对于获得食物是好的,但是对于食物是无用的