我在git中有分支A和B。在这里,我正在挑选从分支A到分支B的更改。为此,我在分支A中创建了一个标签,并在其顶部进行了10次不同的提交。第一次提交已在分支A中被标记。
Git cherry pick命令将提交哈希作为输入。
为此,我有一个从这样的变量中的标签(在分支A中)开始的提交哈希(SHA)列表。
结帐分支A
commithash="$(/usr/bin/git log --boundary --pretty=oneline ${tag_name}.. | sed -e 's/- //'| cut -d ' ' -f 1)"
echo $commithash ---gives spaces delimited commit hashes below.
3f899d3eebce23ce6a1efd3b73ea0b328c8cf3e1 2180e9e8a0a73a5313e70317a20360e3314b2568 f001ad3d03b6a4231d370a3b389d6edbd14db73b 66049c094a0780df7a518ba75d677213168e5211 3a6e53426e85f36b8fc3e19586c18d1ee0abf31b 0b2698bf67ea0c29f0e76fe110a0b89ccbfdecd2 8aed2c998dcd38ac5e01be5d1004d7130b1b2458 07a65386ad8883bf5f774541461cce0779d8b0d2 b57d0d1cea1cf8a151f1244c30b8f08eb7583926
我现在切换到分支B
对于该变量中的每个提交哈希,我要运行命令。
git cherry-pick --strategy-option theirs $(for-each-commit-sha)
运行命令时,该命令成功,但以下情况失败。
A。如果cherry pick命令的输出具有以下输出,则脚本将失败,并且没有选择任何文件。
error: could not apply 34h5432.. adding dev text for cc in file
hint: after resolving the conflicts, mark the corrected paths
hint: with 'git add <paths>' or 'git rm <paths>'
hint: and commit the result with 'git commit'
下面是输出:
git status
On branch B
You are currently cherry-picking commit 34h5432...
(fix conflicts and run "git cherry-pick --continue")
(use "git cherry-pick --abort" to cancel the cherry-pick operation)
Unmerged paths:
(use "git add/rm <file>..." as appropriate to mark resolution)
deleted by us: cc.txt
在这种情况下,我想运行git add cc.txt或对“我们删除:”
之后提到的内容发出git add。git add cc.txt
git commit -m "adding file"
然后继续对列表中的其余提交哈希值进行樱桃选择,直到最后一个。
从最后一次提交到第一次执行都需要完成樱桃选择。在这种情况下,以b57d0d1cea1cf8a151f1244c30b8f08eb7583926
开头并以
3f899d3eebce23ce6a1efd3b73ea0b328c8cf3e1
我该怎么做?
commithash="$(/usr/bin/git log --boundary --pretty=oneline ${tag_name}.. | sed -e 's/- //'| cut -d ' ' -f 1)"
答案 0 :(得分:0)
首先,git cherry-pick
can take a range of commits:您不必手动列出这些提交。
第二,在进行添加和git checkout --theirs -- cc.txt
之前,请先查看git cherry-pick --continue
是否会还原您的文件。