Cách khắc phục lỗi của Git không phải là thứ chúng ta có thể hợp nhất lỗi


291

Tôi chỉ gặp một vấn đề khi hợp nhất một nhánh thành chủ trong git. Đầu tiên, tôi có tên chi nhánh bằng cách chạy git ls-remote. Hãy gọi chi nhánh đó là "tên chi nhánh". Sau đó tôi chạy git merge branch-namelệnh và nhận được kết quả như sau:

fatal: branch-name - not something we can merge

Làm thế nào để tôi giải quyết lỗi này?

Câu trả lời:


356

Như thể hiện trong "Không phải thứ gì đó chúng ta có thể hợp nhất" phát sinh? , lỗi này có thể phát sinh từ một lỗi đánh máy trong tên chi nhánh vì bạn đang cố gắng kéo một nhánh không tồn tại.

Nếu đó không phải là vấn đề (như trong trường hợp của tôi), có khả năng bạn không có một bản sao cục bộ của chi nhánh mà bạn muốn hợp nhất. Git yêu cầu kiến ​​thức địa phương của cả hai chi nhánh để hợp nhất các chi nhánh đó. Bạn có thể giải quyết điều này bằng cách kiểm tra chi nhánh để hợp nhất và sau đó quay lại chi nhánh bạn muốn hợp nhất.

git checkout branch-name
git checkout master
git merge branch-name

Điều này sẽ làm việc, nhưng nếu bạn nhận được một lỗi nói

error: pathspec 'remote-name/branch-name' did not match any file(s) known to git.

bạn cần tìm nạp từ xa (có thể, nhưng không nhất thiết là "nguồn gốc") trước khi kiểm tra chi nhánh:

git fetch remote-name

3
Điều này đã xảy ra với tôi sau khi thêm một điều khiển từ xa mới - tôi cần phải làm điều git fetchđó trước khi hợp nhất chi nhánh từ xa.
Jason

tìm nạp và kiểm tra chi nhánh từ xa. git fetch && git checkout BranchName
Juni Brosas

2
Điều này đã xảy ra với tôi khi tôi tham gia vào dự án sai (nghĩa là đó là một repo khác thậm chí không có chi nhánh tôi muốn hợp nhất)
JoelFan

1
Nếu bạn đang cố gắng đồng bộ hóa một ngã ba tại dòng lệnh ( help.github.com/articles/syncing-a-fork ) thì lỗi này có thể là do bạn đã bỏ lỡ bước 0. Điều gì? Không có bước 0 nào được liệt kê? Vâng, đó là lý do tại sao nó dễ bỏ lỡ. "Trước khi bạn có thể đồng bộ hóa ngã ba của mình với kho lưu trữ ngược dòng, bạn phải định cấu hình một điều khiển từ xa trỏ đến kho lưu trữ ngược dòng trong Git." <- đó là bước 0. Nếu bạn bỏ qua bước đó, bạn sẽ gặp lỗi ở trên, có thể bạn đã đưa vào Google, dẫn bạn đến đây. :-)
Steve Bonds

1
Git requires local knowledge of both branches in order to merge those branches
Gangadhar JANNU

96

Đó là một gợi ý ngớ ngẩn, nhưng hãy chắc chắn rằng không có lỗi đánh máy trong tên chi nhánh!


4
không quá ngớ ngẩn, vì "lỗi đánh máy" có thể làm giảm thực tế là chi nhánh chưa được tải xuống (và do đó không biết tại địa phương) .. Git làm những việc khác với CVS hoặc SVN ..
klang

2
Vấn đề cũng có thể được gây ra nếu tên nhánh chứa các ký tự như dấu phẩy (,) hoặc dấu nháy đơn (').
AxeEffect

Ngoài ra, hãy chắc chắn rằng bạn đang ở trong repo hoặc cửa sổ / tab thiết bị đầu cuối chính xác, đặc biệt nếu bạn làm việc trên nhiều repos cùng một lúc.
totymedli

71

Khi kéo từ một thượng nguồn từ xa, git fetch --allđã thực hiện mẹo cho tôi:

git remote add upstream [url to the original repo]
git checkout [branch to be updated]
git fetch --all
git merge upstream/[branch to be updated]

Trong các trường hợp khác, tôi thấy lỗi "Không phải thứ gì đó chúng ta có thể hợp nhất" cũng sẽ xảy ra nếu nhánh từ xa (gốc, ngược dòng) không tồn tại. Điều này có vẻ rõ ràng, nhưng bạn có thể thấy mình đang làm git merge origin/developmột repo mà chỉ có master.


5
Tôi thực sự không biết tại sao câu trả lời này không thu được nhiều phiếu như câu hỏi trên. 'git fetch -all' là lệnh mà người ta thường bỏ lỡ để chạy trước khi hợp nhất một nhánh từ xa và nó đã giải quyết vấn đề cho tôi.
Dayanand Gowda

2
Bởi vì tìm nạp không tự động kéo và bạn phải làm điều này bằng tay. Vì vậy, một cặp tìm nạp --all & pull --all sẽ thực hiện thủ thuật.
danielpopa

Cảm ơn bạn! Đó git remote add upstreamlà điều quan trọng tôi đã bỏ lỡ đã giải quyết nó cho tôi. Tôi nghĩ rằng một lỗi phổ biến là giả sử một ngã ba tự động biết nó được rẽ nhánh từ đâu.
Brent

23

Tôi đã có vấn đề này là tốt. Chi nhánh trông giống như 'tên người dùng / chủ nhân' dường như gây nhầm lẫn cho git vì nó trông giống như một địa chỉ từ xa mà tôi đã xác định. Cho tôi sử dụng cái này

git merge origin/username/master

làm việc hoàn toàn tốt


4
Tôi đã phải đặt origin/trước tên của chi nhánh từ xa.
AsoodAsItGets

Bạn sẽ phải làm điều này nếu tên của chi nhánh có dấu gạch chéo về phía trước /.
CTS_AE

21

Phương pháp dưới đây làm việc cho tôi mọi lúc.

git checkout master
git pull
git checkout branch-name-to-be-merged
git pull
git checkout branch-name
git pull
git merge branch-name-to-be-merged

Điều này làm việc cho tôi cảm ơn bạn. Tôi thực chất đây là giải pháp phù hợp: về cơ bản hãy chắc chắn rằng bạn đã kiểm tra nhánh nguồn trước khi thử hợp nhất nó.
dps

11

Nó có thể xảy ra vì chi nhánh đó không nằm trong địa phương của bạn. trước khi hợp nhất sử dụng

git fetch origin

7

Bạn đang gặp lỗi này vì nhánh bạn muốn hợp nhất không tồn tại trên kho lưu trữ cục bộ của bạn.

Vì vậy, trước tiên hãy kiểm tra brach bạn muốn hợp nhất vào nhánh chính bằng lệnh sau:

git checkout branch_name_to_merge

Sau đó, cố gắng hợp nhất nó với nhánh chủ bằng lệnh sau:

git merge branch_name_to_merge

2
Điều này cũng có thể xảy ra nếu bạn không chú ý đến tên của chi nhánh (nghĩa là sai chính tả) :)
Matt Borja

Điều này làm việc cho tôi. Khi tôi đang làm việc trong Atom với tab Git và tôi chuyển nhánh với trình đơn thả xuống, đôi khi tôi phải đi đến dòng lệnh và checkoutnhánh
nzaleski

7

Lỗi này cho thấy chi nhánh từ nơi bạn muốn hợp nhất các thay đổi (nghĩa là trong trường hợp tên chi nhánh) không có trong địa phương của bạn, vì vậy bạn nên kiểm tra chi nhánh và tìm nạp các thay đổi cục bộ. Thanh toán cho chi nhánh chính của bạn và tìm nạp, sau đó làm theo các bước dưới đây:

git checkout branch-name
git pull
git checkout new-branch-name
git merge branch-name

Tôi sẽ kén chọn và nói rằng tôi không nghĩ thông báo lỗi gợi ý bất cứ điều gì như trên :-)
Brian Agnew

6

Câu trả lời này không liên quan đến câu hỏi trên, nhưng tôi đã gặp phải một vấn đề tương tự, và có lẽ điều này sẽ hữu ích với ai đó. Tôi đã hợp nhất nhánh tính năng của mình để làm chủ như sau:

$ git merge fix-load

Tôi nhận được thông báo lỗi sau:

merge: fix-load - không phải thứ chúng ta có thể hợp nhất

Tôi đã xem xét trên tất cả các giải pháp, nhưng không có giải pháp nào hiệu quả.

Tôi thấy vấn đề là một lỗi chính tả trên tên chi nhánh của tôi (thực ra, tên chi nhánh hợp nhất là fix-loads).


4
Đối với tôi, thêm nguồn gốc làm việc. Lấy ví dụ của bạn, git merge origin/fix-loadslàm việc.
Ram Patra

3

Tôi đã gặp lỗi này khi tôi thực hiện git merge BRANCH_NAME "some commit message"- Tôi đã quên thêm cờ -m cho thông điệp cam kết, vì vậy nó nghĩ rằng tên chi nhánh bao gồm nhận xét.


3

Theo ý kiến ​​của tôi, tôi đã bỏ lỡ bản đồ chi nhánh địa phương của mình với repo từ xa. tôi đã làm dưới đây và nó hoạt động tốt.

git checkout master
git remote add origin https://github.com/yourrepo/project.git
git push -u origin master
git pull
git merge myBranch1FromMain

2

Nếu chuỗi chứa tham chiếu được tạo bởi một lệnh Git khác (hoặc bất kỳ lệnh shell nào khác cho vấn đề đó), hãy đảm bảo rằng nó không chứa vận chuyển trở lại ở cuối. Bạn sẽ phải loại bỏ nó trước khi chuyển chuỗi thành "git merge".

Lưu ý rằng điều này khá rõ ràng khi điều này xảy ra, bởi vì thông báo lỗi ở 2 dòng:

merge: 26d8e04b29925ea5b59cb50501ab5a14dd35f0f9
 - not something we can merge

3
Vui lòng cung cấp một nhận xét khi bạn đánh giá thấp một câu trả lời. Có thể đó không phải là vấn đề mà người đăng ban đầu gặp phải, nhưng đó là nguyên nhân có thể của thông báo lỗi (bản thân tôi đã gặp sự cố).
ocroquette

2

Chúng tôi đã gặp lỗi này vì chúng tôi có dấu phẩy (,) trong tên chi nhánh. Chúng tôi đã xóa chi nhánh địa phương, sau đó kiểm tra lại nó dưới một tên mới mà không có dấu phẩy. Chúng tôi đã có thể hợp nhất nó thành công.


Gạch dưới cũng có vẻ có vấn đề. +1
Anders Lindén

1
Tôi sử dụng dấu gạch dưới thường xuyên trong tên chi nhánh @ AndersLindén
nzaleski

và dấu ngoặc đơn cũng có vấn đề ... + 1
Pablo Ezequiel

1

Đối với hậu thế: Giống như AxeEffect đã nói ... nếu bạn không kiểm tra lỗi chính tả để xem bạn có các ký tự lố bịch trong tên chi nhánh địa phương của bạn, như dấu phẩy hoặc dấu nháy đơn. Chính xác điều đó đã xảy ra với tôi vừa nãy.


Hoặc gạch dưới. +1
Anders Lindén

1

Tôi đề nghị kiểm tra xem bạn có thể chuyển sang chi nhánh mà bạn đang cố gắng hợp nhất không.

Tôi đã gặp lỗi này mặc dù nhánh tôi muốn hợp nhất nằm trong kho lưu trữ cục bộ và không có lỗi chính tả.

Tôi đã bỏ qua các thay đổi cục bộ của mình để tôi có thể chuyển sang chi nhánh (Stash hoặc commit cũng có thể được ưu tiên). Sau đó, tôi chuyển trở lại chi nhánh ban đầu và việc hợp nhất đã thành công.


0

Đối với tôi, vấn đề xảy ra khi tôi thử điều này:

git merge -s ours --no-commit --allow-unrelated-histories <remote name>/develop

Vì vậy, thực sự tôi nên viết masterthay vì develop, bởi vì chủ nhân là tên chi nhánh của Subtree, không phải chi nhánh thực sự của tôi.


0

Điều này nghe có vẻ lạ, nhưng hãy nhớ thiết lập email và tên git của bạn:

git config --global user.email "MY@EMAIL.COM"
git config --global user.name "FIRST_NAME LAST_NAME"

0

Đối với tôi, vấn đề là 'dấu ngoặc kép' thành thông điệp hợp nhất. Vì vậy, khi tôi loại bỏ dấu kép, tất cả đều hoạt động một cách kỳ diệu. Tôi hy vọng sẽ giúp được ai đó. (Xin lỗi vì vốn tiếng anh nghèo của tôi)


0

Tôi đã có một cây làm việc với chủ và một nhánh khác được kiểm tra trong hai thư mục công việc khác nhau.

PS C:\rhipheusADO\Build> git worktree list
C:/rhipheusADO/Build         7d32e6e [vyas-cr-core]
C:/rhipheusADO/Build-master  91d418c [master]

PS C:\rhipheusADO\Build> cd ..\Build-master\

PS C:\rhipheusADO\Build-master> git merge 7d32e6e #Or any other intermediary commits
Updating 91d418c..7d32e6e
Fast-forward
 Pipeline/CR-MultiPool/azure-pipelines-auc.yml | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

PS C:\rhipheusADO\Build-master> git ls-remote
From https://myorg.visualstudio.com/HelloWorldApp/_git/Build
53060bac18f9d4e7c619e5170c436e6049b63f25        HEAD
7d32e6ec76d5a5271caebc2555d5a3a84b703954        refs/heads/vyas-cr-core 

PS C:\rhipheusADO\Build-master> git merge 7d32e6ec76d5a5271caebc2555d5a3a84b703954
Already up-to-date

PS C:\rhipheusADO\Build>  git push
Total 0 (delta 0), reused 0 (delta 0)
To https://myorg.visualstudio.com/HelloWorldApp/_git/Build
   91d418c..7d32e6e  master -> master

Nếu bạn chỉ cần hợp nhất các cam kết mới nhất:

git merge origin/vyas-cr-core 
git push

Và giống như những gì tôi đã luôn làm:

git checkout master # This is needed if you're not using worktrees
git pull origin vyas-cr-core
git push

0

Hiện tại, nhánh mà bạn đang cố gắng hợp nhất có thể không được xác định bởi git, vì vậy hãy thực hiện git branch và xem nếu nhánh mà bạn muốn hợp nhất có tồn tại không, nếu không thì thực hiện git pull và bây giờ nếu bạn thực hiện git branch, thì nhánh đó sẽ hiển thị ngay bây giờ, và bây giờ bạn thực hiệngit merge <BranchName>

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.