在不更改工作副本的情况下创建 git 分支

qzn*_*znc 8 git

我刚刚创建了一个新的存储库并添加了一个远程:

git init
git remote add foo something
Run Code Online (Sandbox Code Playgroud)

现在我希望 git 出现在foo/master. 通常,那只会是:

git checkout master
Run Code Online (Sandbox Code Playgroud)

Git 足够聪明,可以使用foo/master这些天。

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

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

tor*_*rek 5

如果你刚刚git init在一个新的存储库中完成(而不是重新创建init一个现有的存储库),并且还没有运行git commit,那么你目前在一个未出生的分支上(通常是master-as-unborn-branch)。这意味着它HEAD包含name master,而 named 分支master实际上并不存在。

如果您还没有运行任何git add命令,则您的索引当前为

你会国家希望有是有名字master点作为同犯foo/master,在不改变工作树中的内容。但首先您需要从 remote 获取所有提交foo

$ git fetch foo
Run Code Online (Sandbox Code Playgroud)

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

$ git branch master foo/master
Run Code Online (Sandbox Code Playgroud)

因为你已经在master- 它只是“未出生” - 你现在仍然在mastermaster指向与foo/master.

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

$ git read-tree HEAD
Run Code Online (Sandbox Code Playgroud)

然后git reset各种文件来恢复它们。如果没有——如果你只想使用工作树——你可以简单地git add .(尽管你可能想先设置一个.gitignore)。