我有一堆文件,我在本地所有的一个分支中做了更改,名为“test”。我想选择特定文件,然后将它们移动到新分支并远程提交给新分支。我的老板建议我运行git commit -p然后查看我想要保留的内容并以某种方式将其添加到新分支并推送它。我正在努力弄清楚如何做到这一点。有人能帮忙吗?
谢谢你!答案 0 :(得分:3)
首先切换到新分支:
git checkout -b mynewbranch
然后删除您不想在该分支中拥有的所有文件。完成后,运行:
git add -u
git commit
最后将您的新分支推送到您的遥控器:
git push origin mynewbranch
答案 1 :(得分:2)
如果您对新分支进行了多项更改,并且在同一文件中对旧分支(或被丢弃或其他)进行了更改,那么老板推荐的方法才有意义。< / p>
假设情况如此: 创建&amp;切换到新分支而不更改工作副本: 但不要删除任何内容 - 在此阶段可能会有损耗 添加目前仅存在于新分支上的所有新(未跟踪)文件 添加应在新分支上进行的任何更改 或 我总是发现 interactive 需要一些练习,说实话,它不是最友好的界面。 将索引提交到新分支 - 您可以先查看它以确认它有意义 请注意,您选择 not 添加到此分支的所有更改仍将仅存在于您的工作副本中 切换回您之前的分支机构,随身携带任何未添加的,未提交的工作副本
git checkout -b mynewbranch
git add <filenames>
git add --patch
git add --interactive
git status
git diff --cached
git commit
git checkout master
答案 2 :(得分:0)
有几种方法可以实现这一目标,每种方法都有优点和缺点。
如前所述:切换到另一个分支,删除不需要的文件,提交所需的文件。
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
光滑,保留您的历史记录,但仅在选定的修订版中没有触及其他文件时保存。
使用补丁!
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%,您可以结合方法来实现您的需求。
答案 3 :(得分:-1)
你试过了吗?
git checkout -b new_branch
git commit -a -m "made some changes and stuff"
git format-patch master --stdout > made_some_changes.patch
最后一行创建一个新的补丁文件,并记录新文件中的所有更改。当您创建新分支并且存在未跟踪的文件和更改时,原始分支将返回到其上次提交,并且所有未跟踪的更改仅在新分支中可见,而不是旧分支。
对于suaveness:命名补丁文件../made_some_changes.patch
将在您的存储库之外创建文件。所以命令就是
git format-patch master --stdout > ../made_some_changes.patch