我有两个分支:
tmp分支是分离的
我需要把tmp分支放在master优先解决冲突的顶部tmp
当我做
git checkout tmp
git rebase --strategy=recursive -X theirs master
Run Code Online (Sandbox Code Playgroud)
我得到了错误首先,重新回头重温你的工作......
fatal: Could not parse object '0a722ac51071ecb4d00b1ef45384aac227b942a0^'
Unknown exit code (128) from command: git-merge-recursive 0a722ac51071ecb4d00b1ef45384aac227b942a0^ -- HEAD 0a722ac51071ecb4d00b1ef45384aac227b942a0
Run Code Online (Sandbox Code Playgroud)
当我做
git checkout tmp
git cherry-pick --strategy=recursive -X theirs 0a722ac..384144a
Run Code Online (Sandbox Code Playgroud)
工作良好
我有什么区别或如何使用rebase做同样的事情?
我正在尝试选择此提交
从https:// github(dot)com / AICP / frameworks_base /到https:// github(dot)com / Gopinaidu7 / android_frameworks_base
我用名称master创建了一个新分支,并切换到该分支。
然后我做了:
git cherry-pick 59ebfb7
Run Code Online (Sandbox Code Playgroud)
它得到了
fatal: bad revision '59ebfb7'
Run Code Online (Sandbox Code Playgroud)
我也尝试过:
git cherry-pick 59ebfb7146616e57c15469d7ea85c4362c2fab3c
Run Code Online (Sandbox Code Playgroud)
并得到这个错误
fatal: bad object 59ebfb7146616e57c15469d7ea85c4362c2fab3c.
Run Code Online (Sandbox Code Playgroud)
自从昨晚以来,我做错了并且确实尝试挑选那些提交。
我无法执行此操作,有人可以依次为我指出正确的命令吗?
是否可以从github上挑选所有待处理的PR?
假设我有来自4个不同的分支存储库的4个PR等待审核。我需要将所有这些都应用于最新的源代码。
PR#65 Do something
PR#61 Notify this
PR#55 Fix that
PR#42 Show there
Run Code Online (Sandbox Code Playgroud)
我知道我可以将git remote add所有存储库一一挑选。但是,我相信会有一种更容易/更快捷的方式来挑选所有尚不知道的待处理的拉取请求;)
提前致谢
:git merge <commit-id>和之间有区别
git cherry-pick <commit-id>吗?其中“ commit-id”是我要进入master分支的新分支的提交的哈希。
我最近在 git merge 方面遇到了很多麻烦。我发现,如果它是一个只有很少更改的小分支,那么一切都会按预期工作,但是每当我合并一个已触及文件分配并提交数天/数周的分支时,我发现运行“git mergebranch”时所有的提交没有被应用,所以我必须回顾并确定哪些提交没有被应用并挑选它们。这似乎是错误的,但我不太确定我的工作流程出了什么问题,使得我不得不这样做。
如何确保合并时“应用”指定分支中的所有更改?
任何帮助,将不胜感激!
编辑 -
对于那些想知道 git rebase 本质上是我正在寻找的东西的人来说。这并不是说我的更改被覆盖,也不是其他人所说的任何内容,我的分支远远落后于 master,而且可能是我使用 rebase -interactive 来压缩提交,我认为 git 在某种意义上失去了对已更改内容的引用。在我的分支上进行 Git rebase,检查 master 然后将我的分支合并到 master 修复了所有更改未通过合并的问题。
2020 年 12 月更新 -
我已经更新了我的合并流程,专门使用在线 github gui 并创建拉取请求,这完全解决了我曾经遇到的所有合并问题。
我有大约 10 个提交,我需要从一个旧分支到一个大型 repo 的当前分支中挑选。每次运行cherry-pick命令时,我都会得到以下信息:
$ git cherry-pick -x 11a77a55bf
Performing inexact rename detection: 0% (438032/938483560)
Run Code Online (Sandbox Code Playgroud)
我让它第一次完成,大约需要 10-15 分钟。但它对我选择的每个提交都这样做。有没有办法防止这种情况,至少对于当前命令?
我尝试设置 renameLimit 但它没有帮助:
git -c diff.renameLimit=1 cherry-pick -x 11a77a55bf
Performing inexact rename detection: 0% (1259342/938483560)
Run Code Online (Sandbox Code Playgroud) 令我惊讶的是,在 git 中挑选之后所做的更改在合并时变得过时了。这是一个完整的例子。
以下是一切如常。
Mac:git user1$ mkdir myrepo; cd myrepo; git init
Initialized empty Git repository in /Users/user1/tmp/git/myrepo/.git/
Mac:myrepo user1$ echo "rotums kanoner och krut" > rotum.txt
Mac:myrepo user1$ git add rotum.txt
Mac:myrepo user1$ git commit -m "Added file"
[master (root-commit) 1044abb] Added file
1 file changed, 1 insertion(+)
create mode 100644 rotum.txt
Mac:myrepo user1$ git checkout -b mybranch
Switched to a new branch 'mybranch' …Run Code Online (Sandbox Code Playgroud) 我试图通过rebase/cherry-pick删除最后两次提交.调用后git rebase HEAD^^^ -i,我只留下必要的承诺(把一切都达到HEAD^^,所以我下降HEAD^和HEAD).
在git push我看到以下内容之后:
! [rejected] dev -> dev (non-fast-forward)
error: failed to push some refs to 'git@bitbucket.org:XXXXXX/YYYYYYYYY.git'
hint: Updates were rejected because the tip of your current branch is behind
hint: its remote counterpart. Integrate the remote changes (e.g.
hint: 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.
Run Code Online (Sandbox Code Playgroud)
但git pull只是快速前锋和前HEAD提交.所以,我最终得到了我的开始.我究竟做错了什么?

但是,这张照片似乎对我有误导性.从我的简单测试来看,似乎不仅仅是区别,而是整合了整个文件内容.这是实验:我有这个提交图:
A--B
\
C
Run Code Online (Sandbox Code Playgroud)
Commit A有这样的内容file.txt:
l1
l2
l3
Run Code Online (Sandbox Code Playgroud)
提交B有一点变化:
l1
l2-new
l3
Run Code Online (Sandbox Code Playgroud)
提交C有一点变化:
l1
l2
l3-new
Run Code Online (Sandbox Code Playgroud)
所以现在我正在尝试使用cherry-pick 重放提交B提交C,
git cherry-pick B
Run Code Online (Sandbox Code Playgroud)
我发生了冲突,
<<<<<<< HEAD
l2
l3-new
=======
l2-3
l3
>>>>>>> C
Run Code Online (Sandbox Code Playgroud)
如果仅应用更改,则不应存在.因为我l2在C提交中没有触及行,所以应该顺利应用.我对吗?
似乎“ git rebase”具有其他后备逻辑来处理合并失败:
Falling back to patching base and 3-way merge...
Run Code Online (Sandbox Code Playgroud)
它在那里正在做什么,我将如何调用我的樱桃小贴士来获得相同的行为?
可能正确的解决方案是不尝试将重新基准表示为一系列的小问题,但如果可能的话,那将是很好的,因为我可以使用相同的流程处理重新基准和任意更改集合。
git ×10
git-cherry-pick ×10
git-rebase ×3
cherry-pick ×2
git-merge ×2
github ×1
pull-request ×1
rebase ×1