繁体   English   中英

Git补丁和新分支

[英]Git patches and new branch

我有一堆文件,我在我的本地所有在一个分支上进行了更改,命名为“test”。 我想选择特定文件,然后将它们移动到新分支并将它们远程提交到该新分支。

我的老板建议我运行git commit -p然后检查我想保留的内容,并以某种方式将其添加到新分支并推送它。 我正在努力弄清楚如何做到这一点。

首先切换到一个新的分支:

git checkout -b mynewbranch

然后删除您不想在该分支中包含的所有文件。 完成此操作后,运行:

git add -u
git commit

最后将您的新分支推送到您的遥控器:

git push origin mynewbranch 

只有当您在同一文件中同时对新分支和旧分支(或将被丢弃,或其他)进行更改时,您的老板推荐的方法才有意义。

假设是这样:

  1. 在不更改工作副本的情况下创建并切换到新分支:

     git checkout -b mynewbranch

    但不要删除任何东西 - 在这个阶段这可能会造成损失

  2. 添加目前仅应存在于新分支上的任何新(未跟踪)文件

    git add <filenames>
  3. 添加应该在新分支上进行的任何更改

    git add --patch

    要么

    git add --interactive

    老实说,我总是发现交互式需要一些练习,它不是最友好的界面。

  4. 将索引提交到您的新分支 - 您可以先查看它以确认它有意义

    git status git diff --cached git commit

    请注意,您选择添加到此分支的任何更改仍将仅存在于您的工作副本中

  5. 切换回之前的分支,随身携带任何未添加、未提交的工作副本更改

    git checkout master

有几种方法可以实现这一点,每种方法都有优点和缺点。

直接方法

如前所述:切换到另一个分支,删除不需要的文件,提交您需要的文件。

git checkout -b mynewbranch
git add -u
git commit
git push origin mynewbranch 

快速而肮脏,但如果这些文件已经更改,您将丢失所有历史记录。

忍者招式

您可以从一个分支stash更改并将它们应用到另一个分支中。

git shash # Will put your changes into `hidden pocket`
git checkout -b mynewbranch
git stash pop # Your changes will pop out from `hidden pocket`
git commit
git push origin mynewbranch 

流畅而准确,但您仍会丢失这些文件的历史记录(如果有)。

捆绑方法

您可以将提交从一个分支转移到另一个分支。

git bundle file.name revision..list # Packing revisions to file
git checkout -b mynewbranch
git bundle unbundle file.name # Unpacking revision in new branch

Slick,保留您的历史记录,但仅在选定的修订期间未触及其他文件时才保存。

老套

使用补丁!

git format-patch revision..list # generate patch files for each revision in the list
git checkout -b mynewbranch
cat filename.patch | git am # Applying patch to the current branch

弄清楚您需要应用哪些补丁以及不应该应用哪些补丁可能很复杂。 但是您可以完全控制流程。

如果所描述的都不能 100% 满足您的需求,您可以结合使用方法来实现您的需求。

你有没有尝试过:

  • 尚未提交更改
  • 签出到一个新分支(-b 创建一个新分支)
     git checkout -b new_branch
  • 在新分支中提交更改
    git commit -a -m "made some changes and stuff"
  • 制作补丁
    git format-patch master --stdout > made_some_changes.patch
    最后一行创建一个新的补丁文件并记录新文件中的所有更改。

当您创建一个新分支并且存在未跟踪的文件和更改时,原始分支将返回到其上次提交,并且所有未跟踪的更改仅在新分支中可见,而在旧分支中不可见。

为了温和:将补丁文件命名为../made_some_changes.patch将在您的存储库之外创建文件。 所以命令是

git format-patch master --stdout > ../made_some_changes.patch

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM