【发布时间】:2017-04-11 14:58:54
【问题描述】:
我在学校的实验室机器上有一个 git 存储库,并且遇到了我一直试图解决的问题。
由于我们使用的 CUDA SDK 的安排,我在同一个目录中有两个遥控器,但我不希望来自一个遥控器的所有提交,原点,被推送到另一个遥控器,“proj1”。下面我会更清楚:
最初,该目录有一个带有单个远程的 git 存储库,例如,以下提交历史记录:
A-B-C-D-E <-(origin/master)
然后我添加了第二个远程并创建了一个本地分支,我将从该分支推送和获取:
A-B-C-D-E-G <-(origin/master) (master)
'
'-F-H-I <-(proj1/newbranch) (newbranch)
现在,当我将我的更改从“newbranch”推送到远程“proj1/newbranch”时,我不想用它推送 A-E 提交,我只想从 F 推送。
我知道一个孤立的分支正是我在这里寻找的,但是我们的实验室正在运行 git 1.7.x,它还没有该功能,并且让管理员更新它需要很长时间(我们当然没有权限自己做)。
我还读到我可以使用 rebase 重新排序我的提交,以便 F 是最旧的提交,然后我可以将单个提交推送到“proj1”。但是这样做不会改变/弄乱我在主分支上的历史吗? (A-E 已经在 origin/master 上)
所以我想知道我是否缺少 git 的某些功能来完成我想要的?是否有其他方法可以删除“newbranch”的提交历史或至少将其中断?也许我正在做的是不好的做法,但就像我说的,我需要在这个目录中拥有 CUDA SDK 的所有文件,我不想弄乱它。
【问题讨论】:
-
我不确定我是否理解您的问题。如果您的远程和本地分支的当前状态与上图相同,并且您向本地“newbranch”添加了一些提交,例如
-J-K-L,那么当您将 newbranch 推送到 proj1/newbranch 时,显然只会推送“-JKL”,无需重新推送“AE”。 -
我可能对此不清楚。到目前为止,我的本地“新分支”只有提交 F(我尝试推送,但它当然推送了 while 历史,所以我取消了它)。所以 F 还没有推送到“proj1”。
-
当你说你本地的新分支只有commit F,你的意思是说当你运行“git log newbranch”时你在历史中只看到一个commit F,和它无关“起源/主人”?如果是这样,您本地的新分支已经是一个孤立的分支,将其推送到孤立的远程是微不足道的,所以您必须描述其他情况。
-
不,我创建了本地分支(git branch newbranch),签出新分支(git checkout newbranch)。然后我跑了“git fetch proj1/newbranch”(newbranch 在远程),最后我跑了 git merge proj1/newbranch。然后做了一个提交,F。当我运行 git log 时,我看到 A - F,正如我提到的,我们实验室中的 git 版本没有孤儿
-
每个 Git 都支持孤立分支;他们刚刚在 1.7.x 中获得了一个漂亮的界面。无论如何,这对你一点帮助都没有。无论你想要什么,它都不是孤立的分支。
标签: git github push git-commit git-fetch