社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Git

单独的Git提交/拉请求

Henry Lee • 5 年前 • 1581 次点击  

我最初从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
 
1581 次点击  
文章 [ 3 ]  |  最新文章 5 年前
Arun G
Reply   •   1 楼
Arun G    6 年前

我对这个问题的理解。

问: 它创建了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    6 年前
  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    6 年前

你可以用一个 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 (例如,如果它们共享在冲突行上更改的文件)。