我有点腌渍.
几个月前,我开始在一个回购的分支上开发.我做了一些改变.我打算将我的代码作为拉取请求推回到主服务器,但我意识到在此期间有相当多的变化......
所以,按照Github在"拉入上游变化"中的说明我试过:
$ git remote add upstream ... # savon/httpi
$ git fetch upstream
$ git merge upstream/master
$ git push origin/master # coldnebo/httpi
Run Code Online (Sandbox Code Playgroud)
但是,现在我的叉子很乱.我仍然是git的新手,所以不要试图猜测术语是什么,我只会告诉你我得到了什么以及我的期望:
这是我想要的差异.有没有办法在不丢失我的更改的情况下进行rebase/revert并执行此操作?
真是一团糟.
也许git pull本来会更好?
它没有太多变化,所以如果它不可恢复,我总是可以手动区分并重新控制它,但我正在寻找将来这样做的"正确方法".
好吧,如果你的回购是fubar,那么这里是恢复的步骤:
$ git remote update # make sure origin and upstream are up to date
$ git checkout master
$ git branch my_changes # just to make sure my stuff isn't lost
$ git reset --hard upstream/master
$ git status
# On branch master
# Your branch is behind 'origin/master' by 8 commits, and can be fast-forwarded.
#
Run Code Online (Sandbox Code Playgroud)
忽略那个快进的废话,它不会帮助你,只是重置主人.
$ git push origin +master # now, fork matches upstream/master
Run Code Online (Sandbox Code Playgroud)
现在,如何恢复以前的工作,以便它可以审查?
$ git diff --no-ext-diff --no-prefix master..my_changes > patchfile
$ patch -p0 < patchfile # apply the patchfile to master
$ git diff # to verify patch visually.
$ rm patchfile # clean up
$ rake spec # verify that it really works.
$ git add .
$ git status # double triple verify
$ git commit .
$ git push origin master
Run Code Online (Sandbox Code Playgroud)
那很糟糕.我尝试做rebase,但它一直说"没有变化",并没有要求我检查任何东西?我很确定我不明白这里发生了什么,这就是为什么我发布了我的斗争所以有人可以解释为什么我可以避免这种混乱,并且更加优雅地从A到B从现在已经完全记录下来了.我愿意把这一点搞砸到缺乏经验,但我认为在git中拉动变化应该是一个非常普遍的事情 - 我必须遗漏一些东西.
您应该始终为您创建的每个Pull Request创建新分支.在您将其推送到github以创建请求之前,您应该将您的分支重新绑定到最新的上游分支.
Github说你使用git merge这个,我更喜欢使用,git rebase upstream/master如果没有太多的变化,这将阻止合并提交.
有时,重新定位无法继续,因为您已更改的内容已在上游分支中更改.例如,假设您有一个text.txt类似的文件:
Lorem ipsum
Run Code Online (Sandbox Code Playgroud)
您创建一个PR来更新它,Lorem ipsum!并且上游分支已经将其更改为Hello World如果您执行rebase,为了在创建请求之前使代码保持最新,您会收到合并冲突.该文件使用冲突标记进行更新,您可以选择要使用的版本,甚至可以对其进行编辑,在我们的示例中,我们将其添加到text.txt:
<<<<<<< YOUR_PR_BRANCH
Lorem Ipsum
=======
Hello World
>>>>>>> THE_UPSTREAM_BRANCH
Run Code Online (Sandbox Code Playgroud)
在此之后,添加更新的文件git add并执行git rebase --continue.
| 归档时间: |
|
| 查看次数: |
15299 次 |
| 最近记录: |