我有点小麻烦。
几个月前,我开始开发一个repo的分支。我做了些改变。我正准备将我的代码作为一个pull request推回给master,但我意识到在此期间有相当多的更改...
所以,在“上游变更中的拉动”下的following the instructions at Github我尝试了:
$ git remote add upstream ... # savon/httpi
$ git fetch upstream
$ git merge upstream/master
$ git push origin/master # coldnebo/httpi
不过,现在我的叉子相当乱。我还是一个git新手,所以我不想去猜术语是什么,我只是简单地向你展示我得到了什么和我期望的:
- 想要这个:(显示7个更改的文件,其中包含112个添加和5个删除。)https://github.com/savonrb/httpi/pull/59/files
这就是我想要的差异。有没有什么方法可以在不丢失更改的情况下进行变基/还原?
- 得到了这个:(324次提交几乎覆盖了整个项目加上4个新分支...哎哟!!)https://github.com/coldnebo/httpi/commits/master
真是一团糟。
也许git pull
会更好?
这不是很多的变化,所以如果它是不可恢复的,我总是可以手动差异和重新掌握它,但我正在寻找“正确的方式”,这样做的未来。
3条答案
按热度按时间zfycwa2u1#
你应该总是为你创建的每个合并请求创建新的分支。在你将它推送到github创建请求之前,你应该将你的分支重定向到最新的上游分支。
Github说你可以使用
git merge
,如果没有太大的变化,我更喜欢使用git rebase upstream/master
,这将防止 * 合并提交 *。有时候,变基操作无法继续,因为你所做的修改已经在上游分支中被修改了。例如,假设您有一个
text.txt
文件,如下所示:您创建了一个PR来将其更新为
Lorem ipsum!
,而上游分支已经将其更改为Hello World
。如果您在创建请求之前进行了一次变基,以使代码保持最新,则会出现合并冲突。该文件使用 * 冲突标记 * 更新,您可以选择要使用的版本,甚至可以编辑它,在我们的示例中,我们在text.txt
中得到了这个:之后,添加更新的文件
git add
并执行git rebase --continue
。6jjcrrmo2#
好吧,如果你的repo是fubar,那么下面是恢复的步骤:
忽略快进的废话,它不会帮助你,只是重置主。
现在,如何恢复以前的工作,使它的审查?
太烂了我试着做rebase,但它一直说“没有变化”,并没有要求我签入任何东西?我很确定我不明白这里发生了什么,这就是为什么我张贴我的斗争,所以有人可以解释我如何避免这种混乱,并从A到B更优雅,现在它的充分记录。我愿意把这归咎于git缺乏经验,但我认为拉取更改应该是git中非常常见的事情-我一定错过了什么。
dldeef673#
git pull --rebase
为我工作,并保持历史干净。如果使用多个远程和分支,则指定远程和分支可能是有益的,即。
upstream
被定义为可以用git remote -v
打印的git repo的远程