我想创建一个名为release
的新GitHub分支。
这个分支必须是空的!但是,已经存在一条包含x次提交的分支,我不想保留它的提交历史记录。
我找到的唯一方法是创建一个本地的--orphan
分支。
git switch --orphan <new branch>
git checkout --orphan <new branch>
不同,这个分支不会包含来自当前分支的任何文件(除了git不跟踪的文件)。git push -u origin <branch name>
将其推送到GitHub。git switch --orphan <new branch>
git commit --allow-empty -m "Initial commit on orphan branch"
git push -u origin <new branch>
原始回答:
--orphan
选项有什么问题吗?如果你想要一个空的分支且没有历史记录,这就是正确的方法...
git checkout --orphan empty-branch
git rm -rf .
git commit --allow-empty -m "root commit"
git push origin empty-branch
git add .
步骤? - SCoylegit rm -rf .
删除本地文件。 - Talha Anwar--orphan
适用于在本地创建一个空分支,但是,在将其推送或与其他分支交互之前,您需要进行一次提交。
在孤立分支上创建新提交并不是一个好主意,因为您将无法与其他分支交互。例如:
git checkout --orphan test
git commit --allow-empty -m "init test branch"
git merge master
fatal: refusing to merge unrelated histories
相反,您应该首选从主分支的第一个提交中创建一个新分支。如果提交不为空,则可以在第一个提交之前添加一个空提交,如@houtanb所解释的那样。
接受的答案导致了一些问题,所以我做了以下操作:
$ git branch
* staging
$ git branch master c74d99cf46f6ed23e742f2617e9908294b4a608b
$ git checkout master
Switched to branch 'master'
我成功完成了我的目标,创建第二个分支时没有遇到合并/拉取请求问题。我只需选择一个基本提交以创建我的第二个分支。
接受的答案确实是正确的方法。然而,如果您已经有其他分支无法合并到新创建的新开发分支中,我个人最喜欢的解决方案是执行rebase,在需要合并到develop的分支上执行以下操作:
git rebase develop
这样,初始提交将是要合并的分支上的第一个提交。当然,这里有一个警告 :) 通过执行rebase,您正在重写分支上的历史。因此,您将不得不强制将分支推送到原点:
git push -f
其他人也使用该分支,现在将无法拉取,因此他们将不得不在获取develop后,在本地执行rebase。假设他们在需要重新定位的分支上:
git fetch
git rebase origin/develop
git push origin _branch_
推送到GitHub服务器,你在git上所有的操作都是本地的。 - Joe