“Các bản cập nhật đã bị từ chối vì thẻ đã tồn tại” khi cố gắng đẩy vào SourceTree


117

Khi cố gắng Đẩy qua Cây Nguồn, tôi gặp lỗi sau:

git -c diff.mnemonicprefix=false -c core.quotepath=false -c credential.helper=sourcetree push -v --tags origin refs/heads/master:refs/heads/master 
Pushing to https://user@github.com/repo.git
To https://user@github.com/repo.git
 = [up to date]      master -> master
...
 ! [rejected]        example_tag -> example_tag (already exists)
updating local tracking ref 'refs/remotes/origin/master'
error: failed to push some refs to 'https://user@github.com/repo.git'
hint: Updates were rejected because the tag already exists in the remote.
Completed with errors, see above

Tôi đã không thực hiện bất kỳ thay đổi nào đối với thẻ này theo như tôi biết. Làm thế nào tôi có thể sửa lỗi này?

Câu trả lời:


229

Bạn cũng có thể giải quyết vấn đề này trong git bash (nhấp vào nút "Thiết bị đầu cuối" trong Giao diện người dùng cây nguồn). Kiểu:

git pull --tags

3
Tôi cảm thấy đây là câu trả lời tốt nhất cho nó là con đường ít kháng cự nhất.
Chad

40
Với một xung đột, bạn có thể làm git pull --tags -fđể ghi đè lên một xung đột bạn có cục bộ nếu đó là những gì bạn muốn
DenLilleMand

2
Trong SourceTree, nhấp vào Tìm nạp và bật "tìm nạp tất cả các thẻ". Điều đó sẽ làm được.
darkgaze

116

Nếu bạn chưa thực hiện bất kỳ thay đổi cục bộ nào đối với thẻ mà bạn muốn giữ lại, thì bạn có thể xóa thẻ đã bị từ chối vì thẻ đã tồn tại ( example_tagtrong trường hợp này):

  1. Kích chuột phải vào thẻ và chọn để xóa nó (hãy chắc chắn để bỏ chọn các thẻ Remove từ tất cả các điều khiển từ xa hộp kiểm).
  2. Chọn tùy chọn Tìm nạp (Tìm nạp và lưu trữ cục bộ tất cả các thẻ không cần phải được bật).
  3. Bây giờ bạn sẽ có thẻ vừa bị xóa trở lại và việc cố gắng Đẩy sẽ không hiển thị thông báo lỗi đó nữa.

Lý do điều này phổ biến trong SourceTree là vì tùy chọn Đẩy tất cả các thẻ được đặt thành bật theo mặc định. (Một cách khác để ẩn lỗi này là bỏ chọn tùy chọn đó.)


"Tìm nạp và lưu trữ cục bộ tất cả các thẻ không cần phải được bật" là những gì đã làm cho tôi, việc kiểm tra chỉ khiến sự cố tự lặp lại.
Tom

Giả sử repo ngược dòng (origin) là nguồn gốc của sự thật, giải pháp này ít phá hủy nhất và khắc phục sự cố ngay lập tức.
Steve Henty

Thật không may khi bạn có 15 thẻ bị từ chối, 1,2 và 3 bước có thể rất tẻ nhạt. Có, vô hiệu hóa tùy chọn "Đẩy tất cả các thẻ" có lẽ là một cách đúng đắn.
SagiSergeNadir

27

Bỏ chọn push all tagsở cuối giao diện người dùng khi bạn xác nhận đẩy git của mình


Ý bạn là push all tags?
Wodin

Tuyệt quá! Không quan sát nó. Cảm ơn
Meg-90,

@Wodin nên nếu bạn KIỂM TRA push all tagstrong giao diện người dùng, nó sẽ cố gắng ghi đè các thẻ trước đó. nhưng bạn phải bỏ chọn nó để ngăn chặn việc ghi đè
JDev-Guns

@ JDev-Guns Tôi chỉ đang truy vấn từ ngữ. Ban đầu bạn đã nói push all TABs. Tôi không quen thuộc với SourceTree, nhưng tôi nghi ngờ bạn muốn nói TAGsthay vì TABs.
Wodin

@Wodin oh gotcha! tôi nghĩ rằng tôi đã nói TAGsnhưng nếu i didnt, tôi có nghĩa là để nóiTABs
JDev-Guns

15

git pull --tagshoạt động thực sự tốt nhưng đôi khi bạn có thể gặp lỗi ngay cả với lệnh này. Thông báo lỗi mẫu:

 ! [rejected]        example_tag      -> example_tag  (would clobber existing tag)

Điều này có thể được giải quyết bằng lệnh: git pull --tags -f

Nguồn:

https://github.com/concourse/git-resource/issues/233


14

Đảm bảo rằng bạn bỏ chọn nút "Đẩy tất cả các thẻ" trong khi đẩy.

nhập mô tả hình ảnh ở đây


Như đã đề cập ở trên, nếu bạn thêm một thẻ mới cục bộ, điều này có nghĩa là nó không được đẩy đến điều khiển từ xa?
bytedev

0

Vâng, thực sự, hãy kéo các thẻ trước bạn push --tags. Đã giải quyết vấn đề của tôi.


-1

Tôi giải quyết sự cố trên SourceTree theo cách này:

  1. Xóa thẻ có lựa chọn "Xóa thẻ khỏi tất cả các điều khiển từ xa"
  2. Tạo lại thẻ
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.