Py学习  »  Git

单独的Git提交/拉请求

Henry Lee • 4 年前 • 737 次点击  

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

我现在需要做的是:

现在,我需要分离这些提交,以便已经创建的每个分支都有自己的请求和相对提交。 我怎样才能做到这一点?

更新: 除此之外,我还需要向一些分支添加新的提交。 因此,总之,我需要将提交分离到它们自己的分支(已经存在的分支)中,并向分支添加额外的新提交。

我如何恢复已经做出的提交,然后只将它们提交到相关的分支。

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/38000
 
737 次点击  
文章 [ 3 ]  |  最新文章 4 年前
Arun G
Reply   •   1 楼
Arun G    5 年前

我对这个问题的理解。

问: 它创建了3个分支,但它们都共享相同的提交历史记录

意味着每次从创建的新分支分支分支中分支。所以最后一定是这样。

master    - - - -
                 \
branchone         -  
                   \
branchtwo           -
                     \
branchthree           -

如果只有一个在分支上工作,那么可以使用master在分支上执行一个rebase。

以下是再平衡的过程:

弗斯特 branchtwo

git rebase --onto master branchtwo branchone

意味着分支2将从分支1重新定位到主节点上

做同样的事 branchthree

git rebase --onto master branchthree branchtwo

这将变为以下表示:

             / * - branchtwo
master - - - * - branchone
             \ * - branchthree
Thomas Johannesmeyer
Reply   •   2 楼
Thomas Johannesmeyer    5 年前
  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开始,对每个功能重复以上步骤。

Bill
Reply   •   3 楼
Bill    5 年前

你可以用一个 interactive rebase .

  1. git checkout branchTwo
  2. git rebase -i origin/master
  3. 在出现的编辑器中,删除不应打开的行(提交) branchTwo
  4. 保存并退出编辑器
  5. 使用类似 gitk git log 验证 分支二 看来是对的。
  6. 分支二 原产地, git push -f origin branchTwo:feature/branchTwo (the -f 标志是 force push 只有当你要推动的分支完全在你的控制范围内时,才应该使用它。你 可能 不希望在其他开发人员共享的分支上执行此操作)。

对要解除缠结的每个分支重复以上步骤。注意,只有在 分支二 不依赖于 branchOne (例如,如果它们共享在冲突行上更改的文件)。