Có cách nào để thực hiện git pull
mà bỏ qua mọi thay đổi tệp cục bộ mà không làm mất thư mục và phải thực hiện git clone
không?
rm -rf local_repo && git clone remote_url
.
Có cách nào để thực hiện git pull
mà bỏ qua mọi thay đổi tệp cục bộ mà không làm mất thư mục và phải thực hiện git clone
không?
rm -rf local_repo && git clone remote_url
.
Câu trả lời:
Nếu bạn muốn nói rằng bạn muốn kéo ghi đè lên các thay đổi cục bộ, thực hiện hợp nhất như thể cây làm việc sạch sẽ, tốt, hãy làm sạch cây làm việc:
git reset --hard
git pull
Nếu có các tệp cục bộ chưa được mã hóa, 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 bị theo dõi, -df
để xóa các tệp và thư -xdf
mục không bị theo dõi và để xóa các tệp hoặc thư mục không bị theo dõi hoặc bỏ qua.
Mặt khác, nếu bạn muốn giữ các sửa đổi cục bộ bằng cách nào đó, bạn sẽ sử dụng stash để ẩn chúng đi trước khi kéo, sau đó áp dụng lại chúng sau đó:
git stash
git pull
git stash pop
Tuy nhiên, tôi không nghĩ sẽ bỏ qua các thay đổi theo nghĩa đen - một nửa số lần kéo là 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 mà nó đã tìm nạp.
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 stackoverflow.com/questions/1257592/ cấp
git reset --hard
ảnh hưởng đến cái trước chứ không phải cái sau. Nếu bạn muốn thiết lập lại hoàn toàn về trạng thái của điều khiển từ xa, git reset --hard origin/<branch>
- nhưng thường và trong trường hợp này, hai cam kết đó bạn đi trước nguồn gốc là công việc bạn đã làm, không phải là thứ bạn muốn vứt bỏ.
Đối với tôi sau đây làm việc:
(1) Trước tiên hãy tìm nạp tất cả các thay đổi:
$ git fetch --all
(2) Sau đó đặt lại bản gốc:
$ git reset --hard origin/master
(3) Kéo / cập nhật:
$ git pull
Bạn chỉ muốn một lệnh cho kết quả chính xác như rm -rf local_repo && git clone remote_url
, phải không? Tôi cũng muốn tính năng này. Tôi tự hỏi tại sao git không cung cấp một lệnh như vậy (chẳng hạn như git reclone
hoặc git sync
), svn cũng không cung cấp một lệnh như vậy (chẳng hạn như svn recheckout
hoặc svn sync
).
Hãy thử lệnh sau:
git reset --hard origin/master
git clean -fxd
git pull
git clean -fxd
loại bỏ các tập tin từ .gitignore
cũng.
Lệnh dưới đây sẽ không hoạt động . Nếu bạn làm 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à như thế...
Để thực sự bắt đầu lại, tải xuống thebranch và ghi đè tất cả các thay đổi cục bộ của bạn, chỉ cần làm:
$ git checkout thebranch
$ git reset --hard origin/thebranch
Điều này sẽ làm việc 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'
Nhìn vào git stash để đặt tất cả các thay đổi cục bộ của bạn vào một "tệp stash" và trở lại cam kết cuối cùng. Tại thời điểm đó, bạn có thể áp dụng các thay đổi được sắp xếp của mình hoặc loại bỏ chúng.
Nếu bạn đang dùng 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 tệp được theo dõi được thay đổi trong repo cục bộ, do đó git pull
sẽ hoạt động mà không gặp vấn đề gì.
Điều thú vị nhất về điều này là chỉ 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ẽ không bị ảnh hưởng.
cái này làm việc cho tôi
git fetch --all
git reset --hard origin/master
git pull origin master
với câu trả lời được chấp nhận tôi nhận được lỗi xung đột
Tôi thường làm:
git checkout .
git pull
Trong thư mục gốc của dự án.
.gitignore
"Thêm các tệp không mong muốn vào .gitignore hoạt động miễn là ban đầu bạn chưa cam kết chúng với bất kỳ chi nhánh nào."
Ngoài ra, bạn có thể chạy:
git update-index --assume-unchanged filename
https://chamindac.blogspot.com/2017/07/ignoring-visual-studio-2017-created.html