簡體   English   中英

有什么方法可以從git中的分支中排除提交?

[英]Any way to exclude commits from branch in git?

我正在尋找一種從分支中排除提交的方法。

假設我有我推送到生產服務器的分支主機 但是我有一些承諾,我不想推送到服務器。 有沒有辦法在推送時排除這些提交?

也許使用標簽可以實現?

也許您有其他想法如何解決這個問題?

從一開始……這聽起來像是工作流程中其他分支的用例。 您可能希望擁有一個指向生產服務器的main分支。 然后,當您想要進行增量提交、錯誤修復、重構等時,您可以將它們存儲在development分支中。 這樣,生產服務器仍然可以git pull (來自main )而沒有任何問題,並且您可以將提交存儲在另一個地方。 一旦開發分支是准備去住在生產中,您可以rebasedevelopment上所發生的任何提交的頂枝main ,而你忙於其他,那么你可以快進從提交developmentmain使用git merge

此循環稱為功能分支工作流,可能會解決您遇到的問題的性質。

現在...回答您最初的問題,當您從 git 存儲庫中提取時,沒有一種超級直觀的方法可以過濾掉特定的提交。 並不是說它不能完成......但它需要一些工作才能到達那里。

如果我有一個名為main的分支並且它提交了 ABCDE:

Newest
a2a35a479a69b62cba8c65344211d9fc3e1dc66e - E
7213fb8420ca164c3975078a498b394be3455870 - D
b6db644732c28a4f91061d812a61c37d09f8f94c - C
4dab25431e3dd747874f9488389c094e81bc96ba - B
aa2d56df73afb19043c33f4b9e8addd2d9089375 - A
Oldest

我只想拉提交 ABDE(刪除 C)我會做以下事情:

  1. git fetch origin main
  • -下載/獲取從遠程存儲庫的提交,但將它們合並到一個名為分支的本地副本。
  • origin - 存儲庫中遠程的名稱。 這幾乎總是被命名為origin 使用git remote -v查看可以從中獲取和推送到哪些遙控器。
  • main - 您從中提取提交的分支的名稱。 使用git branch列出可用的分支。
  1. git checkout 4dab25

    • checkout - 嘗試切換到 git 歷史記錄中的指定點
    • 4dab25 - 縮短的 sha-256 摘要( commit hash ),指示您要移動到哪個提交。 您可以使用git log查看可用的提交哈希
  2. git cherry-pick 7213f main

    • cherry-pick - 將其他分支中現有提交的更改“無序”應用到本地分支
    • 7213f - 縮短的 sha-256 摘要( commit hash )指示您開始從哪個提交中選擇提交。
    • main - 這可能是另一個提交哈希,但作為快捷方式,我只是將main指定為對主分支中最新提交的引用。

如果一切順利,您現在將擁有一個分離的 HEAD,並按順序提交 ABDE。 您可能會遇到櫻桃選擇涉及合並的問題(這完全是一個單獨的問題)我不知道您想從這里做什么,但是此時您可以創建一個新分支(並開始使用這個新分支)分支),或者保持原樣,直到您需要再次從main挑選更多提交(這聽起來有點奇怪......我不推薦這個)

如果有一些提交,比如 5,在origin/master 之前,但希望只推送其中的一些,比如 2,手冊可以幫助你:使它成為一個主題分支

撤消提交,使其成為主題分支

$ git branch topic/wip (1) $ git reset --hard HEAD~3 (2) $ git checkout topic/wip (3)

然后你可以push (前兩次提交)到origin/master ,然后繼續工作。 您可能只是進入topic/wip分支,然后有選擇地合並,或者您可能將整個topic/wip分支合並到您的本地 master 中。

關鍵是

  1. branch命令,它將您當前的狀態保存到分支
  2. reset --hard命令,它從 master 中刪除最后 3 個提交

你需要從 master 那里獲得另一個分支,然后從那里挑選你想要的提交。 你可以通過git log查看你的提交

來自主人

git checkout -b branch
git cherry-pick <sha1-of-commit>

然后推動你的分支。

暫無
暫無

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

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