[英]How to make git merge handle uncommitted changes to my working tree?
一位同事和我現在都在主分公司工作。 我在工作樹中有一些我不想提交的代碼(調試語句等)。 現在,如果他對某些相同的文件進行更改,我就無法合並它們:
$ git merge origin/master
Updating 1b8c5c6..eb44c23
error: Entry 'blah.java' not uptodate. Cannot merge.
來自subversion背景,我習慣於在從存儲庫中提取更改時自動合並工作樹,如果存在沖突,我會手動解決它們。
我發現在git中這樣做的最快方法是:
$ git stash
$ git merge origin/master
$ git stash pop
本質上,刪除我未提交的更改,執行合並然后重新應用更改。 如何告訴merge自動將我的工作樹與我想要引入的更改合並?
忘掉你從顛覆中學到的一切。
在引入外部更改之前始終提交。
想象一下,你有一棵大多數工作的樹 - 也許並不完美,但你正在取得一些進展。 然后你去做一個合並,你帶來的代碼只會造成嚴重破壞(本身就是錯誤,需要處理的沖突太多等等)。 如果你可以撤消它,那不是很好嗎?
如果你承諾,你可以。 如果你不這樣做,你就會受苦。
記住:你犯了什么並不一定是你推什么,但你不承諾,你可以很容易失去。
只做安全和輕松的事情,盡早提交並經常提交。
據我所知,你能做的最好的就是你已經擁有的git stash
。 我也覺得奇怪,合並只想處理干凈的樹木。
git pull
將“正常工作” git stash save
git pull
git stash pop
git stash save
git pull
git stash pop
git reset
git stash drop
git pull
將“正常工作” git pull --rebase
將“更好地工作” git pull
git add FILE
為每個沖突的FILE git add FILE
FILE git commit
git pull --rebase
仍然可以“更好地工作”
有關詳細說明,請參閱: https : //happygitwithr.com/pull-tricky.html
您不能告訴git merge
合並對本地存儲庫進行更改的文件的更改。 這可以防止您在合並失敗時丟失更改。
使用CVS和SVN合並方法,如果您沒有在更新之前手動復制文件並且在合並時將它們加擾,則必須手動重新編輯才能恢復到良好狀態。
如果您在進行合並之前提交更改或存儲它們,則一切都是可逆的。 如果合並不順利,你可以嘗試幾種方法使其成功,並選擇效果最好的方法。
如果你確實提交了實驗或調試更改,你可以使用git rebase
在你通過git merge
獲得的提交之后移動它們,以便更容易擺脫它們或者避免意外地將它們推送到存儲庫。
請注意,在已推送到共享存儲庫的分支上使用git rebase
將導致從該存儲庫中提取的每個人都感到悲傷。
我更喜歡在這些情況下使用git stash
,但是我只在合並更改我已編輯但未提交的文件時才使用它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.