簡體   English   中英

如何將本地未提交的更改合並到另一個 Git 分支?

[英]How do I merge my local uncommitted changes into another Git branch?

我如何在 Git 中執行以下操作?

我當前的分支是 branch1,我做了一些本地更改。 但是,我現在意識到我實際上打算將這些更改應用於 branch2。 有沒有辦法應用/合並這些更改,以便它們成為 branch2 上的本地更改而無需在 branch1 上提交它們?

由於您的文件尚未在branch1branch1

git stash
git checkout branch2
git stash pop

要么

git stash
git checkout branch2
git stash list       # to check the various stash made in different branch
git stash apply x    # to select the right one

benjohn 評論 (參見git stash手冊頁 ):

要隱藏當前未跟蹤(新添加的)文件,請添加參數-u ,以便:

git stash -u

存儲,臨時提交和變基都可能過度。 如果您還沒有將更改的文件添加到索引中,那么您可以只簽出另一個分支。

git checkout branch2

只要您編輯的文件在branch1和branch2之間不同,這將起作用。 它會讓你在branch2上保留工作變更。 如果它們不同,那么您可以指定要將本地更改與通過將-m選項切換到checkout所引入的更改進行合並。

git checkout -m branch2

如果您已添加對索引的更改,那么您將首先通過重置撤消這些更改。 (這將保留您的工作副本,它只會刪除分階段的更改。)

git reset

前面提到的藏匿方法的一個較短的替代方案是:

暫時將更改移動到存儲區。

  1. git stash

創建並切換到新分支,然后只需一步即可將存儲區彈出。

  1. git stash branch new_branch_name

然后只需add更改並將更改commit到此新分支。

警告:不適用於git新手。

這在我的工作流程中已經足夠了,我幾乎試圖為它編寫一個新的git命令。 通常的git stash流程是要走的路, 有點尷尬。 我通常先做一個新的提交,因為如果我一直在查看更改,所有的信息都是我腦海中的新鮮事最好只是啟動git commit -ing我發現的東西(通常是我在工作時發現的屬於master的bugfix)在功能分支上)馬上。

它也很有用 - 如果你經常遇到這樣的情況 - 在你當前的工作目錄旁邊有一個總是有master分支簽出的工作目錄

所以我如何實現這一點是這樣的:

  1. git commit使用良好的提交消息立即git commit更改。
  2. git reset HEAD~1撤消當前分支的提交。
  3. (可選)繼續處理該功能。

有時候稍后(異步),或者立即在另一個終端窗口中:

  1. cd my-project-master這是另一個WD共享相同的.git
  2. git reflog找到我剛剛創建的bugfix。
  3. git cherry-pick SHA1的提交。

(可選)(仍然是異步的)您可以重新綁定(或合並)您的功能分支以獲取錯誤修正,通常在您即將提交PR並已清理您的功能分支和WD時:

  1. cd my-project這是我正在研究的主要WD。
  2. git rebase master來獲取錯誤修正。

通過這種方式,我可以不間斷地繼續處理該功能,而不必擔心git stash任何東西或者必須在git checkout之前清理我的WD(然后再次檢查功能分支退出。)並且仍然擁有我的所有錯誤修正轉到master而不是隱藏在我的功能分支中。

當您處理一些重要功能時,IMO git stashgit checkout是一個真正的PIA。

如果它是關於承諾的更改,你應該看看git-rebase,但正如VonC在評論中指出的那樣,當你談論本地更改時,git-stash肯定是這樣做的好方法。

到目前為止給出的答案並不理想,因為它們需要大量不必要的工作來解決合並沖突,或者它們做出太多假設,這些假設經常是錯誤的。 這是如何做到完美。 該鏈接指向我自己的網站。

如何在git中提交不同的分支

您在my_branch上有未提交的更改要提交給master ,而不提交my_branch所有更改。

git merge master
git stash -u
git checkout master
git stash apply
git reset
git add example.js
git commit
git checkout .
git clean -f -d
git checkout my_branch
git merge master
git stash pop

說明

首先將master合並到您的分支中,因為無論如何您最終都必須這樣做,現在是解決任何沖突的最佳時機。

git stash -u-u選項(又名--include-untracked )可以防止你以后在master執行git clean -f -d時丟失未跟蹤的文件。

git checkout master ,重要的是你不要git stash pop ,因為你以后需要這個存儲。 如果你彈出在my_branch創建的存儲,然后在master執行git stash ,當你稍后在my_branch應用該存儲時,將導致不必要的合並沖突。

git reset unstages由git stash apply產生的一切。 例如,已經在存儲中修改但在master不存在的文件將被暫存為“由我們刪除”沖突。

git checkout . git clean -f -d丟棄未提交的所有內容:對跟蹤文件的所有更改以及所有未跟蹤的文件和目錄。 它們已經保存在存儲中,如果留在master ,在切換回my_branch時會導致不必要的合並沖突。

最后一個git stash pop將基於原始的my_branch ,因此不會導致任何合並沖突。 但是,如果您的存儲包含您已提交掌握的未跟蹤文件,git會抱怨它“無法從存儲中恢復未跟蹤的文件”。 要解決此沖突,請從工作樹中刪除這些文件,然后git stash popgit add . ,和git reset

  • 首先, Create a new branch
  • 其次, add your changes
  • 最后, commit to your changes with a beautiful message
git checkout -b branch_name
git add file_one_name file_two_name file_three_name
git commit -m commit_message

這些是我遵循的步驟:

  • git clone {link}
  • cd {repo 文件夾}

您可以檢查狀態和正在使用的分支:

  • 狀態
  • git 分支
  • git 分支 -a

注意:如果您在移動到新分支之前在本地存儲庫中進行了更改,則以下步驟應該仍然有效。

如果“git branch”顯示master,並且您想創建+​​移動到另一個分支:

  • git checkout -b {分支名稱}

使用“git branch”再次檢查分支 現在應該顯示您在新分支中。

現在添加、提交和推送:

  • git 添加。
  • git commit -m "添加新分支"
  • git push origin {分支名稱}

上述步驟適用於我在移動到新的本地分支之前進行更改或移動到新分支后進行更改的情況。 我希望它可以幫助遇到類似情況的人。

暫無
暫無

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

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