单独的git commit / pull请求

时间:2018-08-20 18:28:12

标签: git

我最初是从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个分支,但是它们都共享相同的提交历史记录。提交历史记录基本上已被更新/追加到下一个分支。

我现在需要做什么:

现在,我需要将这些提交分开,以便每个已经进行的分支将具有自己的拉取请求和相对的提交。 我该如何实现?

更新: 最重要的是,我还需要向一些分支添加新的提交。 因此,总而言之,我需要将提交分成各自的分支(已经存在的分支),并向分支中添加其他新的提交。

如何还原已经提交的提交,然后仅将它们提交到相关分支。

3 个答案:

答案 0 :(得分:0)

  1. 使用git log查看您的提交历史记录,并在更改之前查找提交。记住哈希的前4-6位数字。在使用它的同时,还要记下3个提交哈希的前几个字母。

  2. git checkout <hash prior to your changes>-您的存储库现在处于最后一次干净提交,而无需进行更改。

  3. 从此处创建并签出功能分支:git checkout -b feature/feature01

  4. git cherry-pick <hash of first feature commit>-这将在当前分支中移动此提交的更改。

您现在可以在新分支上独家进行这些更改。从每个功能的第2步开始重复。

答案 1 :(得分:0)

您可以使用interactive rebase

  1. git checkout branchTwo
  2. git rebase -i origin/master
  3. 在出现的编辑器中,删除不应在branchTwo上的行(commit)
  4. 保存并退出编辑器
  5. 使用gitkgit log之类的内容查看版本树,以验证branchTwo看起来正确。
  6. 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