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将始终更新有关所有远程分支的本地信息.如果您只想提取/获取单个远程分支的信息,则需要指定它.
小智 69
正确的答案是创建一个孤儿分支.我在我的博客上详细解释了如何做到这一点:http://sidja.in/post/62663941071
...
在开始之前,请升级到最新版本的GIT.要确保您运行的是最新版本,请运行
Run Code Online (Sandbox Code Playgroud)which git
如果它吐出旧版本,您可能需要使用包含刚刚安装的版本的文件夹来扩充PATH.
好的,我们准备好了.在对包含git checkout的文件夹执行cd后,创建一个孤立分支.对于这个例子,我将命名为"mybranch"分支.
Run Code Online (Sandbox Code Playgroud)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
max*_*igo 34
从 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 rm
和git mv
荷兰国际集团做.
尝试
git branch --set-upstream proj-doc origin/proj-doc
Run Code Online (Sandbox Code Playgroud)
并看看这是否有助于你提取太多问题.此外,如果您真的只想获取一个分支,最安全的方法是在命令行上指定它.
小智 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)
git checkout —orphan new_branch_name
ls -la |awk '{print $9}' |grep -v git |xargs -I _ rm -rf ./_
git rm -rf .
touch new_file
git add new_file
git commit -m 'added first file in the new branch'
git push origin new_branch_name
在第2步中,我们只需在本地删除所有文件,以避免与新分支和保留在master
分支中的文件混淆。然后,我们在步骤3中取消链接所有这些文件。最后,在步骤4及之后的步骤中使用新的空分支。
完成后,您可以轻松地在分支之间切换:
git checkout master
git checkout new_branch
Run Code Online (Sandbox Code Playgroud)
如果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)
最好的解决方案是创建一个带有--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 switch
和git restore
而不是git checkout
因此,如果您需要一个空分支,请尝试以下操作:
git switch --orphan YourNewBranch
Run Code Online (Sandbox Code Playgroud)
就是这样 :))