2011-04-29 298 views
205

我運行了一個以衝突結束的git pull。我解決了衝突,現在一切正常(我也使用了mergetool)。合併後提交Git錯誤 - 致命:在合併期間無法執行部分提交

當我提交了解決文件與git commit file.php -m "message"我得到的錯誤:

fatal: cannot do a partial commit during a merge. 

我有同樣的問題之前,並使用提交的工作完美-a。我認爲這不是完美的方式,因爲我不想承諾所有更改。我想用單獨的註釋分別提交文件。我怎樣才能做到這一點?爲什麼git不允許用戶在合併後單獨提交文件?我找不到這個問題的滿意答案。

+4

而且你知道,搜索[git perform「full commit」](https://www.google.com/search?q=git+perform+a+「full + commit」)幾乎沒有任何用處。沒有一個來自Git手冊頁的相關文檔。這是一個非常糟糕的工具。 – jww 2016-06-15 07:31:13

+6

@Torek - 談論Git創建的另一個混亂...爲什麼這麼難以檢出來自另一個分支的衝突文件,以避免衝突,將其添加到這個分支,然後提交它?而WTF是一個部分提交?我找不到任何文檔...用戶被迫嘗試下面的猜測... – jww 2016-07-01 18:03:08

+0

你是怎麼做到的?我有衝突,我什麼都不能做 – 2017-11-14 15:14:48

回答

342

我發現向commit命令添加「-i」可以解決這個問題。 -i基本上告訴它在提交之前放置額外的文件。 那就是:

git commit -i myfile.php 
+22

git commit -i * -m「message」對我來說工作正常 – Maik639 2012-11-06 08:42:37

+6

'Stage additional files'是什麼意思? – jcalfee314 2014-01-06 18:57:37

+8

@ jcalfee314在git中登臺準備提交文件。在這種特殊情況下,它在提交之前通過命令行對文件進行分段。 -i標誌主要用於您完成合並時。你可以閱讀更多關於提交標誌[這裏](https://www.kernel.org/pub/software/scm/git/docs/git-commit.html)。 – MikaelHalen 2014-01-07 08:04:29

2

合併過程中Git希望通過各種原因追蹤父分支。 git認爲你想做的不是合併。您可能會想要手動進行重設或櫻桃選擇。

+1

我以前從來沒有使用過rebase或cherry-pick,現在我只是仔細閱讀手冊,那麼在合併衝突之後,你會怎麼建議「git rebase master」會起作用? – pMan 2011-04-29 05:01:47

+1

這是一個並行工作流程。請參閱http://stackoverflow.com/questions/804115/git-rebase-vs-git-merge基本上,如果您希望「合併」分開提交,請將源分支重新綁定到目標分支的末尾。 – Talljoe 2011-04-29 05:17:04

+1

只是git添加每個單獨的文件,然後提交沒有-a。 – 2011-07-20 17:17:09

12

你可能得到的東西,你有沒有上演提交的衝突。 git不會讓你獨立地提交東西(因爲它是合併的所有部分,我猜),所以你需要git add那個文件,然後git commit -m "Merge conflict resolution"git commit-i標誌爲您添加。

+5

不在1.9.0 - 'commit -i'工作,但不是'git add; git commit' – LeeGee 2014-05-22 07:43:50

22

可以使用git commit -i大多數情況下,但如果它不能正常工作

你需要做git commit -m "your_merge_message"。在合併衝突,所以你需要

  1. 舞臺只有衝突的文件(git add your_file.txt
  2. git commit -m "your_merge_message"
5

你不能合併一個單一的文件。如果你只是想拋棄整個櫻桃採摘提交任何你想要的文件,

git reset --soft <ID-OF-THE-LAST-COMMIT> 

讓你在那裏。

什麼軟復位會將指向當前HEAD的指針移動到您提交的提交(ish),但不會更改這些文件。硬重置會移動指針並將所有文件還原到該提交中的狀態(ish)。這意味着軟重置可以清除合併狀態,但保留對實際文件的更改,然後根據自己的喜好分別提交或重置它們。

+0

你能解釋一下嗎?這可能是我需要的,但我不遵循它的工作原理......這裏的所有答案都只是'添加文件,然後提交!',但這是非常明顯的;我在這裏的原因是我不想在我提交之前添加這些文件。 -_-; – 2016-10-12 15:45:30

+0

@KyleBaker:這個解釋對你有用嗎? – Zds 2016-10-19 13:06:09

+0

這有幫助。謝謝。 :) – 2016-10-26 17:13:29

71
git commit -am 'Conflicts resolved' 

這對我有效。你也可以試試這個。

+1

令人驚歎的,我不知道這個! – JeanValjean 2016-10-04 11:02:47

+1

這會將所有修改後的文件添加到提交中,即使是未停用的**也可能不合需要。用戶可能想要放棄'a'標誌 – 2017-04-03 23:14:19

+1

這正是用戶要求不要做的,這是爲了避免提交所有文件。 – Michael 2017-06-09 21:09:28

2

對於我自己,這發生在SourceTree,當我試圖提交一個合併之前解決所有的文件。然後我標記了最後解決的文件,但在嘗試提交時它仍然給我這個錯誤。我關閉了SourceTree並重新打開它,然後它承諾很好。

+1

謝謝,但不幸的是,這並沒有爲我工作。令人煩惱的是,在讓我合併之前,我必須提交視圖 - 私有以及合併。 – Coxy 2015-07-14 05:30:19

6

您的合併在操作中停止。 您應該添加您的文件,然後 'git的承諾':

git add file_1.php file_2.php file_3.php git commit

乾杯

1

git commit -i -m 'merge message'並沒有爲我工作。它說:

fatal: No paths with --include/--only does not make sense.

FWIW,我來到這裏通過this related question,因爲我得到這個消息:

fatal: You have not concluded your merge (MERGE_HEAD exists).

我也嘗試合併工具,它說No files need merging。很混亂!所以MERGE_HEAD不在需要合併的文件中 - ??

最後,我用這一招只添加修改過的文件(不想加入我的樹中的所有文件,因爲我有一些我想保持未跟蹤):

git ls-files -m | xargs git add

然後我終於(!)能夠承諾和推動。如果git給你提供了關於在這些情況下做什麼的更好的提示,那肯定會很好。

+2

'-i'選項需要一個工作路徑。 – 2017-06-01 15:02:55

8

當我在解決git合併衝突時在我的git commit中忘記了-m時,我得到了這個。

git commit "commit message" 

應該

git commit -m "commit message" 
+2

啊啊!我再次忘了! – user2705463 2016-06-08 20:45:11

1

我解決了這個用完全不同的方法,只使用Xcode的源代碼管理。

背景:另一個團隊將更改推送到遠程Git存儲庫(通過Beanstalk)。在我的結尾,.xcodeproj文件進入不同的目錄下,並且沒有進行更改。後來,當我嘗試提交時,我在Xcode中收到了一個Tree Conflict錯誤。

Tree Conflict Screenshot

作爲幾乎不可能使用Xcode的糾正,我更換了.xcodeproj文件從Git的服務器下載的版本。結果... Xcode項目似乎已經清理完畢,但是來自腐敗Pull的所有更新都顯示爲我作出的更改,並且正在爲Commit提交。

Look at all these Mods and Added files

但是試圖提交的時候,我收到了同樣的「致命的:不能做一個合併過程中的部分承諾」的錯誤,在這裏討論。 (現在,明白我是一名新手程序員,所以我可能缺乏一些理解......但我的無知使我找到了另一種方式來做到這一點)。首先,我將我的主分公司克隆到一個輔助分支並切換到該分支。然後我創建了一個工作副本並將該目錄放置在原始項目目錄之外的那個工作副本中。 (我不知道這是否有必要,但是它是我在閱讀其他故障排除技術時所做的)。然後,我將分支機構切換到主機,在那裏我意識到我的所有Staged文件(更改提交)都沒有了。爲了確保所有文件都更新到對方所做的最新更改,我創建了一個名爲ThirdBranch的新分支,它複製了所有文件,將其推送到Git服務器,並讓Beanstalk將我的主分支的服務器版本與ThirdBrach分支我只是推(一行一行),另一方的所有更改都出現在我的Xcode上。這意味着我的主存儲庫和Git主存儲庫是相同的,這證明我只用Xcode解決了這個問題。

不要問我如何,超出我剛纔描述的......並且肯定填補了我遺漏的空白。我是新來的,我不明白。也許有經驗的程序員可以將相關信息從相關信息中分離出來,並更清楚地重現此技術,這也是我發佈該信息的部分原因。

這是一個重複的回答重複的問題如:Failed Xcode Git Merge is stuck

+2

請不要發佈重複的答案。雖然潛在的問題可能是相同的,但您的答案是針對一個更具體的問題,並且只能回答這個普遍問題。我認爲在這種情況下,您對鏈接到原始答案的問題的評論更爲合適。 – Fookatchu 2016-02-22 09:39:45

5

由於錯誤消息說你不能做一個合併後的部分承諾。您應該提交所有更改,而不是僅提交file.php

這應該工作。

git commit -m "Fixing merge" 
+0

謝謝,它有幫助 – 2017-08-10 07:07:50

0

如果是在源碼樹,我們應該明確的文件標記爲解決衝突解決之後。 選擇文件剛剛解決沒有衝突。然後操作 - >解決衝突 - >標記解決。如果你有多個文件,對所有文件都一樣。立即提交。