2012-03-02 30 views
5

Vì một chi nhánh ít nhiều chỉ là một thẻ, nó tự động chuyển sang cam kết mới, tôi tự hỏi liệu tôi có thể sửa đổi "thẻ" này không.git - di chuyển nhánh "thẻ" sang cam kết khác?

Ví dụ:

   master 
A -- B -- C -- D 

git checkout master sẽ được giống như git checkout D

Tôi có thể thay đổi tổng thể để trỏ đến cam kết B?

master 
A -- B -- C -- D 

git checkout master bây giờ sẽ là tương tự như trường hợp sử dụng git checkout B

Hãy tưởng tượng ai đó đã đẩy một cam kết duy nhất để kho trực tuyến. Khi tôi làm git fetch, tôi nhận được cam kết này cục bộ, nhưng nhánh chính của tôi vẫn trỏ đến cam kết trước đó, trong khi điểm gốc/điểm chính đến cam kết mới. Tôi chỉ muốn di chuyển nhánh master cục bộ đến cùng một commit như origin/master points.

Vì vậy, tôi sẽ không phải hợp nhất.

Nhờ sự giúp đỡ của bạn

+0

Trong kịch bản đẩy của bạn, bạn chỉ cần nhập 'nguồn gốc/master'. Vì bạn không có bất kỳ cam kết cục bộ nào, nó sẽ được giải quyết như là một xa hơn về phía trước – knittl

Trả lời

7

Tái chi nhánh để trỏ đến các cam kết

git branch -f master D 

Sử dụng git branch thay vì git reset --hard cũng giữ các thư mục làm việc của bạn.

+1

Có vẻ như điều này sẽ đúng, nhưng bạn đặt lại nó ở nơi nó đã sử dụng lệnh này. Tôi giả sử bạn đang đi: git branch -f master B. –

+1

Điều này có bảo vệ trạng thái theo dõi các nhánh không? – everett1992

+0

Tôi không chắc lắm, nhưng tôi đoán là không. – knittl

0

Tôi tìm thấy một giải pháp cho điều này:

git fetch 
git checkout origin/master 
git branch -d master 
git branch master 

Đó là logic hơn với tôi

+0

Lưu ý rằng bạn sẽ ở trạng thái _detached head_ sau chuỗi lệnh của bạn. – knittl

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