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

时间:2017-01-11 16:59:42

标签: git

我刚刚创建了一个新的存储库并添加了一个遥控器:

git init
git remote add foo something

现在我想让git参与foo/master的最新提交。通常,那只是:

git checkout master

Git很聪明,现在可以使用foo/master

挑战在于我的工作副本中已有文件,我不希望它们发生变化。我希望git diff向我展示更改,我想提交本地状态并将其推送到foo。

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

1 个答案:

答案 0 :(得分:1)

如果您刚刚在新存储库中完成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)。