Có cách nào để thực hiện git pull
bỏ qua bất kỳ thay đổi tệp cục bộ nào mà không cần thổi thư mục đi và phải thực hiện git clone
không?Git Pull trong khi bỏ qua các thay đổi cục bộ?
Trả lời
Nếu bạn có nghĩa là bạn muốn kéo để ghi đè lên thay đổi địa phương, làm việc hợp nhất, nếu như cây làm việc đã được sạch sẽ, tốt, làm sạch cây làm việc:
git reset --hard
git pull
Nếu có tập tin địa phương untracked bạn có thể sử dụng git clean
để xóa chúng. Sử dụng git clean -f
để xóa các tệp không được theo dõi, -df
để xóa các tệp và thư mục không được theo dõi và -xdf
để xóa các tệp hoặc thư mục không được theo dõi hoặc bị bỏ qua.
Nếu mặt khác bạn muốn giữ lại những sửa đổi địa phương bằng cách nào đó, bạn muốn sử dụng stash để ẩn chúng đi trước khi kéo, rồi áp dụng lại chúng sau đó:
git stash
git pull
git stash pop
Tôi không nghĩ rằng nó làm cho bất kỳ theo nghĩa đen, nghĩa là theo mặc định, bỏ qua các thay đổi - một nửa kéo được hợp nhất và cần phải hợp nhất các phiên bản nội dung đã cam kết với các phiên bản được tìm nạp.
Nếu sau khi 'git reset' các tệp của bạn vẫn khác với điều khiển từ xa, hãy đọc http://stackoverflow.com/questions/1257592/removing-files-saying-old-mode-100755-new-mode-100644-from-unstaged- thay đổi-in –
Git là điều kỳ lạ nhất từ trước tới nay. Git reset - đã xong. Sau đó, trạng thái git: Chi nhánh của bạn đứng trước 2 lần commit. – shailenTJ
@shailenTJ "Thay đổi cục bộ" ở đây có nghĩa là các thay đổi không được cam kết, chứ không phải cam kết cục bộ. 'git reset --hard' ảnh hưởng đến cái cũ, chứ không phải cái sau. Nếu bạn muốn đặt lại hoàn toàn về trạng thái của từ xa, 'git reset --hard origin/
Nhìn vào git stash để đặt tất cả thay đổi cục bộ của bạn vào "tệp stash" và hoàn nguyên về lần commit cuối cùng. Tại thời điểm đó, bạn có thể áp dụng các thay đổi đã lưu trữ của mình hoặc loại bỏ chúng.
Nếu bạn đang trên Linux:
git fetch
for file in `git diff origin/master..HEAD --name-only`; do rm -f "$file"; done
git pull
Vòng lặp for sẽ xóa tất cả các file theo dõi được thay đổi trong repo địa phương, vì vậy git pull
sẽ làm việc mà không cần bất kỳ vấn đề.
Điều đẹp nhất về điều này là chỉ có các tệp được theo dõi sẽ bị ghi đè bởi các tệp trong repo, tất cả các tệp khác sẽ bị bỏ quên.
Tôi nghĩ bạn có nghĩa là "các tệp được theo dõi" chính xác là những gì tôi cần, cảm ơn. – Ali
Lệnh dưới không hoạt động luôn. Nếu bạn làm thế chỉ:
$ git checkout thebranch
Already on 'thebranch'
Your branch and 'origin/thebranch' have diverged,
and have 23 and 7 different commits each, respectively.
$ git reset --hard
HEAD is now at b05f611 Here the commit message bla, bla
$ git pull
Auto-merging thefile1.c
CONFLICT (content): Merge conflict in thefile1.c
Auto-merging README.md
CONFLICT (content): Merge conflict in README.md
Automatic merge failed; fix conflicts and then commit the result.
và vân vân ...
Để thực sự bắt đầu lại, tải thebranch và ghi đè lên tất cả thay đổi địa phương của bạn, chỉ cần làm:
$ git checkout thebranch
$ git reset --hard origin/thebranch
Điều này sẽ hoạt động tốt.
$ git checkout thebranch
Already on 'thebranch'
Your branch and 'origin/thebranch' have diverged,
and have 23 and 7 different commits each, respectively.
$ git reset --hard origin/thebranch
HEAD is now at 7639058 Here commit message again...
$ git status
# On branch thebranch
nothing to commit (working directory clean)
$ git checkout thebranch
Already on 'thebranch'
CÓ. Đây là những gì tôi cần cho một cách tiếp cận cuối cùng "không cung cấp cho một F về những gì địa phương". Cảm ơn. :) – Adambean
Đối với tôi sau đây làm việc:
(1) Đầu tiên lấy tất cả thay đổi:
$ git fetch --all
(2) Sau đó thiết lập lại tổng thể:
$ git reset --hard origin/master
(3) Kéo/cập nhật:
$ git pull
này sẽ lấy chi nhánh hiện tại và cố gắng để làm một tua đi để làm chủ:
git fetch && git merge --ff-only origin/master
git fetch --all && git reset --hard origin/master
Bằng cách "bỏ qua" Ý anh là "ghi đè"? – Cascabel