有没有办法存储完整的提交(delta,comment等等)?
我的用例是:
我知道我可以使用临时分支和樱桃选择,但有没有办法在现场进行?
更新
1 -> 2 -> 3 -> 4 -> 5 -> 6 -> 7 -> 8 -> 9
↑ ↑ ↑
master A B
After making changes to A:
1 -> 2 -> 3 -> 4 -> 5A -> 6A -> 7
↑ ↑
master A
Now I'd like for B to look like
1 -> 2 -> 3 -> 4 -> 5A -> 6A -> 7 -> 8 -> 9
↑ ↑ ↑
master A B
使用我的挑选解决方案(有没有替代方案,也没有任何冲突?)
git checkout B
git branch tmp_B
1 -> 2 -> 3 -> 4 -> 5A -> 6A -> 7 -> 8 -> 9
↑ ↑ ↑
master A B
tmp_B
git reset master --hard
1 -> 2
↑
master
B
git rebase A
1 -> 2 -> 3 -> 4 -> 5A -> 6A -> 7
↑ ↑
master A
B
git cherry-pick 8..9 // no merge conflicts
git branch -D tmp_B
1 -> 2 -> 3 -> 4 -> 5A -> 6A -> 7 -> 8 -> 9
↑ ↑ ↑
master A B
答案 0 :(得分:3)
有没有办法存储完整的提交(delta,comment等等)?
据我所知。你会做一个临时分支。提交已经在分支中,因此您已经有效地拥有了所需的内容。
我需要将B重新绑定到A中的新更改,但是有很多手动冲突解决方案
采摘樱桃而不是变基不会有帮助,因为重新定位是樱桃采摘,它只是一堆樱桃挑选系列。因为Git中的冲突通常是内容冲突的结果,而不是合并算法傻瓜,所以很少有一种巧妙的解决冲突的方法。无论如何,你都必须处理冲突。
你可以从B中选择两个提交而不是重新设置,但除非发生非常奇怪的事情,否则会导致相同的冲突。
请注意,由于看起来您对“A的更改”是交互式rebase的结果,因此您的repo如下所示:
A
↓
5A -> 6A -> 7A
/
1 -> 2 -> 3 -> 4 -> 5 -> 6 -> 7 -> 8 -> 9
↑ ↑
master B
如果您只是git checkout B; git rebase A
,那么Git可能会感到困惑。它可能会尝试将提交5到9重新设置为7A。这可能会导致5到5A,以及6和6A之间的冲突。
相反,您可以使用git rebase --onto A 7 B
重新定义8和9。这将改变7和B之间的所有内容,但不包括7.实际上,樱桃选择8和9到A.或者你可以git cherry-pick 8 9
,但最好习惯git rebase --onto here from to
语法因为它更普遍适用于分支机构的任何分支。