创建Git分支而不更改工作副本

11

我刚刚创建了一个新的代码库并添加了一个远程地址:

git init
git remote add foo something

现在我想让git处于foo/master的最新提交状态。通常情况下,只需要执行以下命令:

git pull foo master

git checkout master

现在的Git已经聪明到可以使用foo/master了。

问题在于我已经在我的工作副本中有文件,而且我不想让它们改变。我想要git diff来显示我所做的更改,并且我想提交本地状态并将其推送到foo。

背景:本地状态是一个即将推送到Github Pages的生成的网站。

1个回答

12
如果你刚刚在一个新的仓库中执行了git init(而不是重新init一个现有的仓库),并且还没有运行git commit,那么你当前就处于一个未命名分支上(通常是master作为未命名分支)。这意味着HEAD包含名称master,而名为master的分支实际上并不存在。
如果您还没有运行任何git add命令,则您的索引目前为空。
您想要的状态是将名称master指向与foo/master相同的提交,而不更改工作树的内容。但首先,您需要获取来自远程foo的所有提交:
$ git fetch foo

现在您可以创建分支本身:

$ git branch master foo/master

由于您已经在master分支上,它只是“未诞生”,所以您现在仍然在master分支上,并且master指向与foo/master相同的提交。

您的索引仍然为空,因此git status会将您标记为从HEAD提交中删除了每个文件,并将工作树中的每个文件视为未跟踪的文件。如果您想要从当前提交中填充索引,现在可以执行以下操作:

$ git read-tree HEAD

如果需要恢复文件,您可以使用 git reset 命令。如果只想使用工作区,您可以直接运行 git add . 命令(尽管您可能需要先设置 .gitignore 文件)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接