簡體   English   中英

git 從現有分支創建新分支但忽略所有提交

[英]git create new branch from existing branch but ignore all commits

我有兩個分支 main 和 feat1。 不幸的是,由於一系列事件,feat1 中的提交歷史非常奇怪,以至於我無法再壓縮提交。 這使得基於 main 的變基成為一場噩夢。 有沒有辦法創建一個新分支,代碼為 feat1,但是 git 查看這個新分支和 main 的所有差異,就好像我自己在代碼中完成的一樣?

蠻力解決方案是:(1) checkout feat1 並復制並粘貼所有項目文件並暫時將它們保存在“其他地方”。 (2) checkout main 並創建一個新分支,(3) 用復制和粘貼的文件覆蓋新分支上的所有文件。

有沒有更簡單的方法來實現這一目標?

如果您不再關心歷史,那么只需進行合並和壓縮....也就是說,如果您在主分支之外的分支中所做的所有更改僅與您的分支相關(沒有從中獲取內容其他人)。 如果是這樣的話:

git checkout my-branch
git merge main-branch
# when you wrap that up:
git reset --soft main-branch
git commit -m "All changes in a single shot"

eftshift0 的回答應該可以正常工作,但我想提出一個使用低級管道工具的單線解決方案:

git branch -f your_branch "$(git commit-tree -p master -m 'new commit message' your_branch^{tree})"

git commit-tree將使用指定的父提交、提交消息和樹 object 創建一個新的提交 object; 並打印創建的提交的 hash。 這允許您使用git branch -f從給定的提交重新創建您的分支。

之后,您可以切換到您的分支或使用它執行其他命令。

您可以軟重置到feat1分支中的舊提交(commit_hash),最近更改的文件將被取消暫存

git reset commit_hash

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM