如何为新项目创建新的空分支

faz*_*oso 321 git branch git-branch

我们正在使用git存储库来存储我们的项目.我们的分支机构从原始分支机构出发.但现在我们想要创建一个小型新项目来跟踪一些文档.为此我们想要创建一个新的空分支来开始存储我们的文件,我希望网络的其他用户克隆该分支.

我们怎么做?

我试了一些东西,但他们没有用.

$ mkdir proj_doc; cd proj_doc
$ git init
$ git add .
$ git commit -m 'first commit'
$ git br proj_doc
$ git co proj_doc
$ git br -d master
$ git push origin proj_doc
Run Code Online (Sandbox Code Playgroud)

它似乎推动分支正常,但当我进行提取或拉取时,它从其他分支下载信息,然后我还从其他项目获得一些额外的文件.什么是最好的解决方案?

Hie*_*mus 619

您可以将分支创建为孤儿:

git checkout --orphan <branchname>
Run Code Online (Sandbox Code Playgroud)

这将创建一个没有父母的新分支.然后,您可以使用以下命令清除工作目录:

git rm --cached -r .
Run Code Online (Sandbox Code Playgroud)

并添加文档文件,提交它们并将它们推送到github.

pull或fetch将始终更新有关所有远程分支的本地信息.如果您只想提取/获取单个远程分支的信息,则需要指定它.

  • 在`git checkout --orphan`之后,可以使用`git reset --hard`来删除遗留文件. (45认同)
  • 很好的答案,但新的分支开始与所有文件(从前一个分支)开始是有点烦人的. (17认同)
  • 在 `git checkout --orphan &lt;branch&gt;` 之后你看不到分支的原因是它还没有任何提交。第一次提交后,`git branch` 会打印新的分支。 (16认同)
  • 发出`git checkout --orphan <branch>`时; 我没有在`git branch`中看到<branch>的任何列表. (12认同)
  • git clean -fd删除未跟踪的文件. (11认同)
  • `git clean -f -i -d` 删除所有东西 (3认同)

小智 69

正确的答案是创建一个孤儿分支.我在我的博客上详细解释了如何做到这一点:http://sidja.in/post/62663941071

...

在开始之前,请升级到最新版本的GIT.要确保您运行的是最新版本,请运行

which git
Run Code Online (Sandbox Code Playgroud)

如果它吐出旧版本,您可能需要使用包含刚刚安装的版本的文件夹来扩充PATH.

好的,我们准备好了.在对包含git checkout的文件夹执行cd后,创建一个孤立分支.对于这个例子,我将命名为"mybranch"分支.

git checkout --orphan mybranch
Run Code Online (Sandbox Code Playgroud)

删除孤立分支中的所有内容

git rm -rf .
Run Code Online (Sandbox Code Playgroud)

做一些改变

vi README.txt
Run Code Online (Sandbox Code Playgroud)

添加并提交更改

git add README.txt
git commit -m "Adding readme file"
Run Code Online (Sandbox Code Playgroud)

而已.如果你跑

git log
Run Code Online (Sandbox Code Playgroud)

你会注意到提交历史从头开始.要切换回主分支,只需运行即可

git checkout master
Run Code Online (Sandbox Code Playgroud)

您可以通过运行返回孤立分支

git checkout mybranch
Run Code Online (Sandbox Code Playgroud)

  • 不鼓励仅链接答案.如果移动或删除链接,您的答案将变得毫无价值.考虑直接在这个答案中添加必要的部分.特别注意先前答案未涵盖的问题. (15认同)
  • 不幸的是,该链接不再有效. (3认同)
  • 仅删除工作目录中的所有内容是危险的,因为任何不重要的项目都将具有未跟踪的文件(配置,环境,缓存等)。 (2认同)

max*_*igo 34

2022 年更新

从 Git 2.23 开始,您可以用来git switch --orphan <new branch>创建没有历史记录的空分支。与 不同的是git checkout --orphan,所有跟踪的文件都将被删除。

一旦您实际上在此分支上进行了提交,就可以将其推送到远程存储库:

git switch --orphan <new branch>
git commit --allow-empty -m "Initial commit on orphan branch"
git push -u origin <new branch>
Run Code Online (Sandbox Code Playgroud)


jth*_*ill 11

像这样建立一个空的新分支:

true | git mktree | xargs git commit-tree | xargs git branch proj-doc
Run Code Online (Sandbox Code Playgroud)

如果您的proj-doc文件已经在单个子目录下的提交中,您可以通过这种方式创建新分支:

git commit-tree thatcommit:path/to/dir | xargs git branch proj-doc
Run Code Online (Sandbox Code Playgroud)

这可能是比更方便git branch --orphan,如果这样做会让你有很多的git rmgit mv荷兰国际集团做.

尝试

git branch --set-upstream proj-doc origin/proj-doc
Run Code Online (Sandbox Code Playgroud)

并看看这是否有助于你提取太多问题.此外,如果您真的只想获取一个分支,最安全的方法是在命令行上指定它.

  • 这个答案很有趣,因为它允许您以完全空的第一次提交启动另一个分支/根。 (2认同)

小智 7

假设您有一个master包含文件/目录的分支:

> git branch  
master
> ls -la # (files and dirs which you may keep in master)
.git
directory1
directory2
file_1
..
file_n
Run Code Online (Sandbox Code Playgroud)

逐步说明如何创建一个空分支:

  1. git checkout —orphan new_branch_name
  2. 执行以下命令之前,请确保您位于正确的目录中:
    ls -la |awk '{print $9}' |grep -v git |xargs -I _ rm -rf ./_
  3. git rm -rf .
  4. touch new_file
  5. git add new_file
  6. git commit -m 'added first file in the new branch'
  7. git push origin new_branch_name

在第2步中,我们只需在本地删除所有文件,以避免与新分支和保留在master分支中的文件混淆。然后,我们在步骤3中取消链接所有这些文件。最后,在步骤4及之后的步骤中使用新的空分支。

完成后,您可以轻松地在分支之间切换:

git checkout master 
git checkout new_branch
Run Code Online (Sandbox Code Playgroud)


cyb*_*b0k 6

如果git版本没有--orphan选项,则应使用此方法;

git symbolic-ref HEAD refs/heads/<newbranch> 
rm .git/index 
git clean -fdx 
Run Code Online (Sandbox Code Playgroud)

做了一些工作

git add -A
git commit -m <message>
git push origin <newbranch>
Run Code Online (Sandbox Code Playgroud)

  • 注意,`git clean` 可以删除你不想删除的文件!在使用 `-f` 选项真正运行它之前,首先运行 `git clean -ndx` 以查看它将删除哪些文件。 (2认同)

Kam*_*ain 6

最好的解决方案是创建一个带有--orphan选项的新分支,如下所示

git checkout --orphan <branch name>
Run Code Online (Sandbox Code Playgroud)

这样,您将能够创建一个新分支并直接结帐到新分支。这将是一个没有父母的分支。

默认情况下,该--orphan选项不会删除工作目录中的文件,因此您可以通过以下方式删除工作目录文件:

git rm --cached -r
Run Code Online (Sandbox Code Playgroud)

具体做什么--orphan

--orphan <new_branch>
创建一个新的孤立分支,命名为<new_branch>,从<start_point>它开始并切换到它。在这个新分支上进行的第一次提交将没有父级,它将成为与所有其他分支和提交完全断开的新历史的根。

索引和工作树被调整,就像你之前运行过 git checkout <start_point> 一样。这允许您通过轻松运行 git commit -a 进行根提交来开始记录一组类似于 <start_point> 的路径的新历史记录。

当您想从提交中发布树而不公开其完整历史记录时,这会很有用。您可能希望这样做以发布当前树是“干净”的项目的开源分支,但其完整历史记录包含专有或以其他方式受阻的代码位。

如果要开始记录一组与 <start_point> 路径完全不同的路径的断开连接历史记录,那么您应该在创建孤立分支后立即通过运行 git rm -rf 清除索引和工作树。从工作树的顶层。之后,您将准备好准备新文件、重新填充工作树、从其他地方复制它们、提取 tarball 等。


小智 6

基于Hiery Nomus 的这个答案

您可以创建一个分支作为孤儿:

git checkout --orphan <branchname>
Run Code Online (Sandbox Code Playgroud)

这将创建一个没有父级的新分支。然后,您可以使用以下命令清除工作目录:

git rm --cached -r .
Run Code Online (Sandbox Code Playgroud)

然后你只需提交带有空提交的分支,然后推送

git commit -m <commit message> --allow-empty
git push origin <newbranch>
Run Code Online (Sandbox Code Playgroud)


小智 6

在这里找到的

如果您使用 git 2.23 或更高版本,您可能会习惯使用git switchgit restore而不是git checkout

因此,如果您需要一个空分支,请尝试以下操作:

git switch --orphan YourNewBranch
Run Code Online (Sandbox Code Playgroud)

就是这样 :))