2015-12-15 31 views
12

tl; dr: git checkout master không chuyển sang nhánh chính, không có lỗi hoặc bất kỳ đầu ra nào và tôi không biết tại sao. Bất kỳ chi nhánh nào khác đều hoạt động tốt.git checkout master không chuyển nhánh - kho bị hỏng?

Tôi có kho lưu trữ git bao gồm các chi nhánh developmentmaster. Tôi làm một bản sao mới của kho, kiểm tra chi nhánh development làm mặc định.

$ git clone <REPO-URL> --branch development 
$ git branch -a 
* development 
origin/HEAD -> origin/development 
origin/development 
origin/master 
$ git show-ref 
656c781c2affc26792f857baf8e232de07101535 refs/heads/development 
656c781c2affc26792f857baf8e232de07101535 refs/remotes/origin/HEAD 
656c781c2affc26792f857baf8e232de07101535 refs/remotes/origin/development 
cfee1a1761642453edf5d001565f23b50243ff09 refs/remotes/origin/master 

Nguyên tắc chỉnh sửa chỉ là đúng, cam kết đó tồn tại và là cam kết mới nhất của nhánh chính của tôi.

Cho đến nay mọi thứ đều bình thường, nhưng khi tôi cố gắng để chuyển sang nắm vững điều này xảy ra:

$ git checkout master 
$ git branch 
* development 

Không có thông báo từ thanh toán, không có lỗi, không có gì, và các chi nhánh không được chuyển.

Những điều tôi đã cố gắng cho đến nay:

  • Tạo một chi nhánh thứ hai master2 so với cùng cam kết => kiểm tra hoạt động tốt.
  • Xóa và tái tạo ngành thạc sĩ cả trong nước và trên origin => một lần nữa không thanh toán có thể
  • git checkout -b master --track origin/master => làm việc, nhưng tôi nghĩ rằng nó không phải là cần thiết để sử dụng lệnh này vì đây là những gì git checkout master nên làm tự động
  • Cam kết và thúc đẩy công việc, nhưng không thay đổi vấn đề thanh toán
  • Tôi đã thử một số phiên bản git (1.9, 2.2) và máy (linux, windows), sự cố xảy ra ở mọi nơi.

Bạn có thêm ý tưởng nào không? Tôi đang thiếu gì? Kho của tôi có bị hỏng không? Làm thế nào tôi có thể sửa lỗi này?

+0

Vì vậy, bạn muốn 'git checkout master' để tạo ra một chi nhánh theo dõi cục bộ như trong 'git checkout -b chủ --track nguồn gốc/master'? Bạn không muốn tạo một nhánh master cục bộ khác với nhánh chủ điều khiển từ xa, đúng không? Bạn hoàn toàn đúng, lệnh của bạn sẽ hoạt động, miễn là có chính xác một từ xa với một nhánh có tên trùng khớp. Tôi thực sự không biết làm thế nào không có thông báo lỗi ở tất cả ... –

Trả lời

12

tôi đã thấy một cái gì đó tương tự như khi có một bậc thầy thư mục i n cây nguồn. Thật không may là tôi không tìm được cách nào để yêu cầu git giải thích giá trị như một nhánh. Đổi tên thư mục đã khắc phục sự cố cho tôi.

+0

Đúng vậy! Thật là một vấn đề lén lút ... – schrom

+3

Chạy vào điều này quá và không nhận ra có những thư mục khớp với tên của các nhánh mục tiêu trong thư mục làm việc hiện tại của tôi. Nếu bạn chuyển đổi thư mục, ví dụ: cd vào một thư mục con, bạn sẽ có thể chuyển đổi các nhánh cũng như không có vấn đề gì. – Phil

3

Chi nhánh chính tại địa phương trong kho lưu trữ của bạn không khác với bất kỳ chi nhánh địa phương nào khác trong kho lưu trữ của bạn. Bạn đã sao chép kho lưu trữ của mình vào nhánh phát triển, đó là nhánh địa phương duy nhất mà bạn có. Vì vậy, nếu bạn cố gắng thanh toán cho chi nhánh chính tại địa phương của bạn, git nói rằng nó không tồn tại.

Nếu bạn muốn có cả hai phát triển và làm chủ chi nhánh địa phương ban đầu giống nhau, bạn có thể làm một trong những điều sau:

Tải repo của bạn để làm chủ chi nhánh, và tạo ra một ngành phát triển địa phương:

git clone <repo_url> 
git checkout -b development 

hoặc tải repo của bạn để chi nhánh phát triển, và tạo ra một chi nhánh tổng thể địa phương:

git clone <REPO-URL> --branch development 
git checkout -b master 
+0

Tôi nghĩ rằng, từ dòng của mình 'git checkout -b master --track origin/master' mà ông nói sản xuất kết quả mục tiêu, rằng ông muốn tạo ra một nhánh theo dõi. Mã của bạn cung cấp các nhánh hoàn toàn bằng nhau (như bạn chỉ ra). Bạn cũng không giải thích tại sao không có thông báo lỗi. –

6

Nếu repo của bạn có tên thư mục hoặc tên tệp giống với tên chi nhánh thì bạn sẽ cần phải: git checkout xyz -- với số tiền thêm -- ở cuối. Nó yêu cầu git sử dụng một nhánh hoặc commit thay vì cố gắng sử dụng tên thư mục/tập tin.

Tìm thấy câu trả lời trên một stackoverflow bài: Git change branch when file of same name is present

+0

Đây là những gì đã xảy ra với tôi khi tôi làm việc với Magento. Có một thư mục có tên là "dev" và chúng tôi cũng đang sử dụng một nhánh gọi là "dev". Vì vậy, 'git checkout dev' thực sự kiểm tra nội dung của thư mục' dev' chứ không phải nhánh dev. Cảm ơn :) – user1105491

Các vấn đề liên quan