Tôi đã thực hiện một số cam kết trên các tệp khác nhau, nhưng cho đến nay tôi chỉ muốn đẩy vào kho lưu trữ từ xa của mình một cam kết cụ thể.
Điều đó có thể không?
Tôi đã thực hiện một số cam kết trên các tệp khác nhau, nhưng cho đến nay tôi chỉ muốn đẩy vào kho lưu trữ từ xa của mình một cam kết cụ thể.
Điều đó có thể không?
Câu trả lời:
Để đẩy lên thông qua một cam kết nhất định, bạn có thể viết:
git push <remotename> <commit SHA>:<remotebranchname>
cung cấp <remotebranchname>
đã tồn tại trên điều khiển từ xa. (Nếu không, bạn có thể sử dụng git push <remotename> <commit SHA>:refs/heads/<remotebranchname>
để tự động tạo nó.)
Nếu bạn muốn đẩy một cam kết mà không đẩy các cam kết trước đó, trước tiên bạn nên sử dụng git rebase -i
để đặt hàng lại các cam kết.
git push <remotename> <commit SHA>:<remotebranchname>
làm. mẹo là kết hợp nó với git rebase -i
để di chuyển cam kết bạn muốn làm cam kết đầu tiên và chỉ định cam kết đó
git push <remotename> <commit SHA>:refs/heads/<new remote branch name>
. Sau đó, đẩy như câu trả lời mô tả.
git push origin HEAD~1:master
.
-f
cờ.
Các câu trả lời khác là thiếu trên các mô tả sắp xếp lại.
git push <remotename> <commit SHA>:<remotebranchname>
sẽ đưa ra một cam kết duy nhất, nhưng cam kết đó phải là OLDEST của cam kết cục bộ, không bị đẩy, không bị nhầm lẫn với cam kết hàng đầu, đầu tiên hoặc mẹo, đó là tất cả các mô tả mơ hồ theo quan điểm của tôi. Cam kết cần đến các cam kết cũ nhất của bạn, tức là xa nhất từ các cam kết gần đây nhất của bạn. Nếu đó không phải là cam kết cũ nhất thì tất cả các cam kết từ SHA cũ nhất, cục bộ, không đẩy của bạn đến SHA được chỉ định sẽ được đẩy. Để sắp xếp lại các cam kết sử dụng:
git rebase -i HEAD~xxx
Sau khi sắp xếp lại cam kết, bạn có thể đẩy nó vào kho lưu trữ từ xa một cách an toàn.
Để tóm tắt, tôi đã sử dụng
git rebase -i HEAD~<number of commits to SHA>
git push origin <post-rebase SHA>:master
để đẩy một cam kết duy nhất đến chi nhánh chủ từ xa của tôi.
Người giới thiệu:
Xem thêm:
Tôi đề nghị sử dụng git rebase -i
; di chuyển các cam kết bạn muốn đẩy lên đầu các cam kết bạn đã thực hiện. Sau đó sử dụng git log
để lấy SHA của cam kết bị từ chối, kiểm tra và đẩy nó. Cuộc nổi loạn sẽ đảm bảo rằng tất cả các cam kết khác của bạn bây giờ là con của người bạn đã đẩy, vì vậy các lần đẩy trong tương lai cũng sẽ hoạt động tốt.
git log
bước?
Cherry-pick hoạt động tốt nhất so với tất cả các phương pháp khác trong khi đẩy một cam kết cụ thể.
Cách để làm điều đó là:
Tạo một chi nhánh mới -
git branch <new-branch>
Cập nhật chi nhánh mới của bạn với chi nhánh gốc của bạn -
git fetch
git rebase
Những hành động này sẽ đảm bảo rằng bạn chính xác có cùng nội dung với nguồn gốc của bạn.
Cherry-pick sha id
mà bạn muốn làm đẩy -
git cherry-pick <sha id of the commit>
Bạn có thể có được sha id
bằng cách chạy
git log
Đẩy nó về nguồn gốc của bạn -
git push
Chạy gitk
để thấy rằng mọi thứ trông giống như bạn muốn.
git rebase -i
sẽ là giải pháp lý tưởng như đề xuất trong các giải pháp trên. Cherry pick chỉ được sử dụng khi bạn muốn nhân đôi cam kết.
Tôi tin rằng bạn sẽ phải "git hoàn nguyên" trở lại cam kết đó và sau đó đẩy nó. Hoặc bạn có thể cherry-pick
cam kết vào một nhánh mới và đẩy nó tới nhánh trên kho lưu trữ từ xa. Cái gì đó như:
git branch onecommit
git checkout onecommit
git cherry-pick 7300a6130d9447e18a931e898b64eefedea19544 # From the other branch
git push origin {branch}
cherry-pick
cam kết bạn muốn.
Bạn cũng có thể, trong một thư mục khác: