我最初是从master克隆一个存储库并进行更改。有人告诉我建立三个独立的分支,每个分支都有各自的相对提交和提取请求。 完成更改后,我对3个分支进行了3次以下步骤:
//For branch one
1) git checkout -b branchOne
2) git add file1 file2 file3
3) git commit -m "commit msg"
4) git push --set-upstream origin [branch_name]
//For branch two
1) git checkout -b branchOne
2) git add file4 file5 file6
3) git commit -m "commit msg"
4) git push --set-upstream origin [branch_name]
执行了3次之后,它创建了3个分支,但是它们都共享相同的提交历史记录。提交历史记录基本上已被更新/追加到下一个分支。
我现在需要做什么:
现在,我需要将这些提交分开,以便每个已经进行的分支将具有自己的拉取请求和相对的提交。 我该如何实现?
更新: 最重要的是,我还需要向一些分支添加新的提交。 因此,总而言之,我需要将提交分成各自的分支(已经存在的分支),并向分支中添加其他新的提交。
如何还原已经提交的提交,然后仅将它们提交到相关分支。
答案 0 :(得分:0)
使用git log
查看您的提交历史记录,并在更改之前查找提交。记住哈希的前4-6位数字。在使用它的同时,还要记下3个提交哈希的前几个字母。
git checkout <hash prior to your changes>
-您的存储库现在处于最后一次干净提交,而无需进行更改。
从此处创建并签出功能分支:git checkout -b feature/feature01
。
git cherry-pick <hash of first feature commit>
-这将在当前分支中移动此提交的更改。
您现在可以在新分支上独家进行这些更改。从每个功能的第2步开始重复。
答案 1 :(得分:0)
您可以使用interactive rebase。
git checkout branchTwo
git rebase -i origin/master
branchTwo
上的行(commit)gitk
或git log
之类的内容查看版本树,以验证branchTwo
看起来正确。branchTwo
推到git push -f origin branchTwo:feature/branchTwo
的原点(-f
标志是force push
,仅当要推送到的分支完全在您的控制范围内时才应使用。您可能可能不想在其他开发人员共享的分支上执行此操作。)对于要取消缠结的每个分支重复上述步骤。请注意,这仅在branchTwo
中的提交不依赖于branchOne
中的提交(例如,如果它们共享在冲突的行上更改的文件)时起作用。
答案 2 :(得分:0)
根据我对问题的理解。
问:,它创建了3个分支,但它们都共享相同的提交历史记录
意味着您每次都从创建的新分支中分支出来。因此,必须以这种方式结束。
master - - - -
\
branchone -
\
branchtwo -
\
branchthree -
如果您只是一个在分支机构工作的人,则可以使用master在分支机构上进行重新建立基础。
以下是重新设置基准的过程:
第一个branchtwo
git rebase --onto master branchtwo branchone
分支二的方法将从分支一重新构建为主模型
对branchthree
git rebase --onto master branchthree branchtwo
这将变为以下表示形式:
/ * - branchtwo
master - - - * - branchone
\ * - branchthree