use*_*205 7 git git-patch git-detached-head
这一直困扰着我关于git.我有一个包含多个遥控器的存储库,我需要将修补程序应用于遥控器的主分支.所以,我尝试做:
git fetch remote1 master
git checkout remote1/master
Run Code Online (Sandbox Code Playgroud)
但是,我总是处于一个独立的头状态.检查远程主控并应用补丁的正确方法是什么?
这些命令都不会给你一个独立的头.你还有其他的东西,你没有在你的问题中写下来吗?
git fetch remote1
Run Code Online (Sandbox Code Playgroud)
这将获取与默认refspec匹配的任何内容remote1.这通常意味着所有分支都在开启,remote1除非您以不同方式配置它.
git fetch remote1 master
Run Code Online (Sandbox Code Playgroud)
上面的命令master从中获取remote1并将其存储为FETCH_HEAD.
git pull remote1/master
Run Code Online (Sandbox Code Playgroud)
此命令将出错,因为remote1/master它不是存储库的名称.
有几种方法可以解决问题,但这实际上取决于您要完成的任务.典型的方法是为要更新的远程分支创建本地分支,并合并相应的分支:
git checkout -b r1-master remote1/master
git merge other/master
git push
Run Code Online (Sandbox Code Playgroud)
但是,目前还不清楚这是否适合您.你能发布一些关于你想要完成的事情的更多信息吗?
感谢您使用实际命令更新您的问题.
git fetch remote1 master
Run Code Online (Sandbox Code Playgroud)
上面的命令抓取master的最新内容并将其存储在其中FETCH_HEAD.你想离开master这里,让Git更新你的远程引用:git fetch remote1.在此指针处,remote1/master应该与服务器上的内容保持同步.
git checkout remote1/master
Run Code Online (Sandbox Code Playgroud)
这是一个分离的命令HEAD.远程引用不与本地分支(引用refs/heads)相同.当您签出远程引用时,Git会使您处于分离的HEAD状态.我相信这背后的想法是让你不要破坏你对远程分支的看法.远程引用用于作为上次获取时远程存储库状态的快照.让你承诺他们会破坏这种观点.本地分支机构需要进行编辑.
让我们做几个假设.首先,我将假设这remote1不是origin,并且您已添加此远程以与除主要存储库之外的其他存储库进行交互.其次,我假设你有能力推送代码remote1.
在继续之前,让我们确保将push.default其设置为合理的值.跑git config --global push.default.如果没有返回,或者它说matching,那么让我们改变它.默认配置(matching)将尝试在推送特定远程时更新所有引用.如果您不使本地版本的分支机构保持最新状态,则会产生消除人们工作的副作用.更好的默认值是upstream,它只会推动您所在的分支.设置为:
git config --global push.default upstream
Run Code Online (Sandbox Code Playgroud)
在Git中添加补丁的典型方法是创建分支,制作补丁,将其合并到远程分支的本地表示中,然后将结果推送到远程分支.
让我们从创建远程主服务器的本地分支开始:
git checkout -b r1-master remote1/master
Run Code Online (Sandbox Code Playgroud)
现在我们有一个本地分支叫r1-master我们更新(HEAD会不会被这个分支分离).
接下来,做你的工作.这通常涉及创建另一个分支并向其添加一系列补丁:
git checkout -b fix-bugs r1-master
# Edit and commit
Run Code Online (Sandbox Code Playgroud)
接下来,您需要r1-master再次结帐.在进行更改时,有人可能会引入新的提交remote1/master,所以让我们确保我们是最新的:
git fetch remote1
Run Code Online (Sandbox Code Playgroud)
接下来,合并错误修复分支:
git merge fix-bugs
Run Code Online (Sandbox Code Playgroud)
这将弹出一个编辑器.添加有关合并修复内容的合理日志消息,然后保存并退出.
此时,r1-master您已修复它,但它不在远程服务器上.我们需要将新引入的修补程序推送到远程服务器:
git push
Run Code Online (Sandbox Code Playgroud)
此时,r1-master并且remote1/master应该指向相同的事情,并且已使用您的修复程序更新了远程服务器.
对于它的价值,看起来你是Git的新手,所以让我指出几个教程.第一个是Try Git.我喜欢它,因为你可以在网页上尝试命令,但它不是很深入. Git Immersion更深入,并且对Git背后的概念进行了很好的展示.NDP Software的Git Cheatsheet也是命令如何影响本地和远程存储库的绝佳参考.最后,Pro Git是一本很好的书,可以帮助您入门.在线版本是免费的.
| 归档时间: |
|
| 查看次数: |
6478 次 |
| 最近记录: |