it-swarm-vi.com

Làm cách nào để buộc "git pull" ghi đè lên các tệp cục bộ?

Làm cách nào để tôi ghi đè lên các tệp cục bộ trên git pull?

Kịch bản như sau:

  • Một thành viên trong nhóm đang sửa đổi các mẫu cho một trang web mà chúng tôi đang làm việc
  • Họ đang thêm một số hình ảnh vào thư mục hình ảnh (nhưng quên thêm chúng dưới sự kiểm soát nguồn)
  • Họ đang gửi hình ảnh qua thư, sau đó, cho tôi
  • Tôi đang thêm hình ảnh dưới sự kiểm soát nguồn và đẩy chúng vào GitHub cùng với các thay đổi khác
  • Họ không thể lấy các bản cập nhật từ GitHub vì Git không muốn ghi đè lên các tệp của họ.

Đây là lỗi tôi nhận được:

lỗi: Tập tin cây làm việc không được đóng gói 'công khai/hình ảnh/icon.gif' sẽ bị ghi đè bằng cách hợp nhất

Làm cách nào để buộc Git ghi đè lên chúng? Người này là một nhà thiết kế - thường thì tôi giải quyết tất cả các xung đột bằng tay, vì vậy máy chủ có phiên bản mới nhất mà họ chỉ cần cập nhật trên máy tính của họ.

5771
Jakub Troszok

Quan trọng: Nếu bạn có bất kỳ thay đổi cục bộ nào, chúng sẽ bị mất. Có hoặc không có tùy chọn --hard, mọi cam kết cục bộ chưa được đẩy sẽ bị mất.[*]

Nếu bạn có bất kỳ tệp nào không được theo dõi bởi Git (ví dụ: nội dung người dùng đã tải lên), các tệp này sẽ không bị ảnh hưởng.


Tôi nghĩ rằng đây là cách đúng đắn:

git fetch --all

Sau đó, bạn có hai lựa chọn:

git reset --hard Origin/master

HOẶC Nếu bạn đang ở một số chi nhánh khác:

git reset --hard Origin/<branch_name>

Giải trình:

git fetch tải xuống bản mới nhất từ ​​xa mà không cố gắng hợp nhất hoặc rebase bất cứ thứ gì.

Sau đó, git reset đặt lại nhánh chính thành những gì bạn vừa tìm nạp. Tùy chọn --hard thay đổi tất cả các tệp trong cây làm việc của bạn để khớp với các tệp trong Origin/master


Duy trì các cam kết hiện tại của địa phương

[*]: Điều đáng chú ý là có thể duy trì các cam kết cục bộ hiện tại bằng cách tạo một nhánh từ master trước khi đặt lại:

git checkout master
git branch new-branch-to-save-current-commits
git fetch --all
git reset --hard Origin/master

Sau này, tất cả các cam kết cũ sẽ được giữ trong new-branch-to-save-current-commits

Những thay đổi không được cam kết

Tuy nhiên, những thay đổi không được cam kết (thậm chí được dàn dựng) sẽ bị mất. Hãy chắc chắn để stash và cam kết bất cứ điều gì bạn cần. Cho rằng bạn có thể chạy như sau:

git stash

Và sau đó để áp dụng lại những thay đổi không được cam kết này:

git stash pop
8139
RNA

Thử đi:

git reset --hard HEAD
git pull

Nó nên làm những gì bạn muốn.

808
Travis Reeder

CẢNH BÁO: git clean xóa tất cả các tệp/thư mục chưa được theo dõi của bạn và không thể hoàn tác.


Đôi khi chỉ cần clean -f không giúp được gì. Trong trường hợp bạn đã không theo dõi GIÁM ĐỐC, tùy chọn -d cũng cần thiết:

# WARNING: this can't be undone!

git reset --hard HEAD
git clean -f -d
git pull

CẢNH BÁO: git clean xóa tất cả các tệp/thư mục chưa được theo dõi của bạn và không thể hoàn tác.

Trước tiên hãy xem xét sử dụng cờ -n (--dry-run). Điều này sẽ cho bạn thấy những gì sẽ bị xóa mà không thực sự xóa bất cứ điều gì:

git clean -n -f -d

Ví dụ đầu ra:

Would remove untracked-file-1.txt
Would remove untracked-file-2.txt
Would remove untracked/folder
...
409
David Avsajanishvili

Giống như Hedgekey tôi nghĩ rằng câu trả lời là khủng khiếp. Nhưng mặc dù câu trả lời của Hedgekey có thể tốt hơn, tôi không nghĩ nó thanh lịch như nó có thể. Cách tôi tìm thấy để làm điều này là bằng cách sử dụng "tìm nạp" và "hợp nhất" với một chiến lược đã xác định. Điều này sẽ làm cho nó để các thay đổi cục bộ của bạn được bảo tồn miễn là chúng không phải là một trong những tệp mà bạn đang cố gắng ghi đè lên. 

Trước tiên hãy cam kết về những thay đổi của bạn

 git add *
 git commit -a -m "local file server commit message"

Sau đó tìm nạp các thay đổi và ghi đè nếu có xung đột

 git fetch Origin master
 git merge -s recursive -X theirs Origin/master

"-X" là tên tùy chọn và "của họ" là giá trị cho tùy chọn đó. Bạn đang chọn sử dụng thay đổi "của họ", thay vì thay đổi "của bạn" nếu có xung đột.

347
Richard Kersey

Thay vì làm:

git fetch --all
git reset --hard Origin/master

Tôi khuyên bạn nên làm như sau:

git fetch Origin master
git reset --hard Origin/master

Không cần tìm nạp tất cả các điều khiển từ xa và chi nhánh nếu bạn sẽ đặt lại về nhánh Origin/master phải không?

251
Johanneke

Có vẻ như cách tốt nhất là trước tiên hãy làm:

git clean

Để xóa tất cả các tệp chưa được theo dõi và sau đó tiếp tục với git pull... thông thường.

125
Jakub Troszok

Cảnh báo, thực hiện việc này sẽ xóa vĩnh viễn các tệp của bạn nếu bạn có bất kỳ thư mục/* mục nào trong tệp gitignore của bạn.

Một số câu trả lời dường như là khủng khiếp. Kinh khủng theo nghĩa những gì đã xảy ra với @Lauri bằng cách làm theo đề nghị của David Avsaj Biếnvili.

Thay vào đó (git> v1.7.6):

git stash --include-untracked
git pull

Sau này bạn có thể làm sạch lịch sử stash.

Thủ công, từng cái một:

$ git stash list
[email protected]{0}: WIP on <branch>: ...
[email protected]{1}: WIP on <branch>: ...

$ git stash drop [email protected]{0}
$ git stash drop [email protected]{1}

Tàn nhẫn, tất cả cùng một lúc:

$ git stash clear

Tất nhiên nếu bạn muốn quay lại với những gì bạn đã đặt:

$ git stash list
...
$ git stash apply [email protected]{5}
107
Hedgehog

Bạn có thể thấy lệnh này hữu ích để loại bỏ các thay đổi cục bộ:

git checkout <your-branch> -f

Và sau đó thực hiện dọn dẹp (loại bỏ các tệp không bị theo dõi khỏi cây làm việc):

git clean -f

Nếu bạn muốn xóa các thư mục không bị theo dõi ngoài các tệp không bị theo dõi:

git clean -fd
88
Vishal

Thay vì hợp nhất với git pull, hãy thử điều này: 

git fetch --all

theo dõi bởi:

git reset --hard Origin/master.

82
Lloyd Moore

Điều duy nhất làm việc cho tôi là:

git reset --hard HEAD~5

Điều này sẽ đưa bạn trở lại năm cam kết và sau đó với

git pull

Tôi thấy rằng bằng cách tìm kiếm cách hoàn tác hợp nhất Git .

55
Chris BIllante

Vấn đề với tất cả các giải pháp này là tất cả chúng đều quá phức tạp, hoặc, một vấn đề thậm chí còn lớn hơn, là chúng loại bỏ tất cả các tệp không được theo dõi khỏi máy chủ web, điều mà chúng tôi không muốn vì luôn có các tệp cấu hình cần thiết. máy chủ và không có trong kho Git.

Đây là giải pháp sạch nhất mà chúng tôi đang sử dụng:

# Fetch the newest code
git fetch

# Delete all files which are being added, so there
# are no conflicts with untracked files
for file in `git diff HEAD..Origin/master --name-status | awk '/^A/ {print $2}'`
do
    rm -f -- "$file"
done

# Checkout all files which were locally modified
for file in `git diff --name-status | awk '/^[CDMRTUX]/ {print $2}'`
do
    git checkout -- "$file"
done

# Finally pull all the changes
# (you could merge as well e.g. 'merge Origin/master')
git pull
  • Lệnh đầu tiên lấy dữ liệu mới nhất.

  • Lệnh thứ hai kiểm tra nếu có bất kỳ tệp nào đang được thêm vào kho lưu trữ và xóa các tệp không bị theo dõi khỏi kho lưu trữ cục bộ sẽ gây ra xung đột.

  • Lệnh thứ ba kiểm tra tất cả các tệp đã được sửa đổi cục bộ.

  • Cuối cùng, chúng tôi cố gắng cập nhật lên phiên bản mới nhất, nhưng lần này không có bất kỳ xung đột nào, vì các tệp không được theo dõi trong repo không tồn tại nữa và tất cả các tệp được sửa đổi cục bộ đều giống như trong kho lưu trữ.

51
Strahinja Kustudic

Tôi đã từng gặp vấn đề tương tự. Không ai cho tôi giải pháp này, nhưng nó hiệu quả với tôi.

Tôi đã giải quyết nó bằng cách:

  1. Xóa tất cả các tập tin. Chỉ để lại thư mục .git.
  2. git reset --hard HEAD
  3. git pull
  4. git Push

Bây giờ nó hoạt động.

39
John John Pichler

Trước hết, hãy thử cách tiêu chuẩn:

git reset HEAD --hard # To remove all not committed changes!
git clean -fd         # To remove all untracked (non-git) files and folders!

Cảnh báo : Các lệnh trên chỉ có thể dẫn đến mất dữ liệu/tệp nếu bạn không cam kết! Nếu bạn không chắc chắn, hãy tạo bản sao lưu trước trong toàn bộ thư mục kho lưu trữ của bạn.

Sau đó kéo nó một lần nữa.

Nếu ở trên sẽ không giúp ích và bạn không quan tâm đến các tệp/thư mục chưa được theo dõi của mình (tạo bản sao lưu trước chỉ trong trường hợp), hãy thử các bước đơn giản sau:

cd your_git_repo  # where 'your_git_repo' is your git repository folder
rm -rfv *         # WARNING: only run inside your git repository!
git pull          # pull the sources again

Điều này sẽ XÓA tất cả các tệp git (miễn trừ .git/ dir, nơi bạn có tất cả các cam kết) và kéo lại.


Tại sao git reset HEAD --hard có thể thất bại trong một số trường hợp?

  1. Quy tắc tùy chỉnh trong .gitattributes file

    Việc có quy tắc eol=lf trong .gitattribut có thể khiến git sửa đổi một số thay đổi tệp bằng cách chuyển đổi kết thúc dòng CRLF thành LF trong một số tệp văn bản.

    Nếu đó là trường hợp, bạn đã cam kết những thay đổi CRLF/LF này (bằng cách xem xét chúng trong git status) hoặc thử: git config core.autcrlf false để tạm thời bỏ qua chúng.

  2. Không tương thích hệ thống tập tin

    Khi bạn đang sử dụng hệ thống tệp không hỗ trợ các thuộc tính quyền . Ví dụ: bạn có hai kho lưu trữ, một trên Linux/Mac (ext3/hfs+) và một thuộc tính khác trên hệ thống tệp dựa trên FAT32/NTFS.

    Như bạn lưu ý, có hai loại hệ thống tệp khác nhau, do đó, loại hệ thống không hỗ trợ quyền Unix về cơ bản không thể đặt lại quyền truy cập tệp trên hệ thống không hỗ trợ loại quyền đó, vì vậy, dù bạn có thử --hard như thế nào, git luôn phát hiện một số "thay đổi".

34
kenorb

Tiền thưởng:

Khi nói về pull/fetch/merge trong các câu trả lời trước, tôi muốn chia sẻ một mẹo thú vị và hiệu quả,

git pull --rebase

Lệnh trên là lệnh hữu ích nhất trong cuộc sống Git của tôi giúp tiết kiệm rất nhiều thời gian.

Trước khi đẩy cam kết mới của bạn đến máy chủ, hãy thử lệnh này và nó sẽ tự động đồng bộ hóa các thay đổi máy chủ mới nhất (với fetch + merge) và sẽ đặt cam kết của bạn ở đầu trong nhật ký Git. Không cần phải lo lắng về việc kéo/hợp nhất thủ công.

Tìm chi tiết trong "git pull --rebase" làm gì?.

33
Sazzad Hissain Khan

Tôi đã có một vấn đề tương tự. Tôi phải làm điều này:

git reset --hard HEAD
git clean -f
git pull
27
Ryan

Tôi tóm tắt các câu trả lời khác. Bạn có thể thực thi git pull mà không gặp lỗi:

git fetch --all
git reset --hard Origin/master
git reset --hard HEAD
git clean -f -d
git pull

Cảnh báo : Kịch bản này rất mạnh, do đó bạn có thể mất các thay đổi của mình.

27
Robert Moon

Dựa trên kinh nghiệm tương tự của riêng tôi, giải pháp được cung cấp bởi Strahinja Kustudic ở trên cho đến nay là tốt nhất. Như những người khác đã chỉ ra, chỉ cần thực hiện thiết lập lại cứng sẽ xóa tất cả các tệp không bị theo dõi có thể bao gồm nhiều thứ mà bạn không muốn xóa, chẳng hạn như tệp cấu hình. Điều an toàn hơn là chỉ xóa các tệp sắp được thêm vào và đối với vấn đề đó, bạn cũng có thể muốn kiểm tra bất kỳ tệp nào được sửa đổi cục bộ sắp được cập nhật.

Điều đó trong tâm trí, tôi đã cập nhật kịch bản của Kustudic để làm điều đó. Tôi cũng đã sửa một lỗi đánh máy (thiếu 'trong bản gốc).

#/bin/sh

# Fetch the newest code
git fetch

# Delete all files which are being added,
# so there are no conflicts with untracked files
for file in `git diff HEAD..Origin/master --name-status | awk '/^A/ {print $2}'`
do
    echo "Deleting untracked file $file..."
    rm -vf "$file"
done

# Checkout all files which have been locally modified
for file in `git diff HEAD..Origin/master --name-status | awk '/^M/ {print $2}'`
do
    echo "Checking out modified file $file..."
    git checkout $file
done

# Finally merge all the changes (you could use merge here as well)
git pull
26
Rolf Kaiser

Tôi tin rằng có hai nguyên nhân có thể gây ra xung đột, phải được giải quyết riêng và theo như tôi có thể nói không có câu trả lời nào ở trên giải quyết cả hai:

  • Các tệp cục bộ không bị theo dõi cần phải được xóa, bằng tay (an toàn hơn) hoặc như được đề xuất trong các câu trả lời khác, bởi git clean -f -d

  • Các xác nhận cục bộ không nằm trên nhánh từ xa cũng cần phải được xóa. IMO cách dễ nhất để đạt được điều này là: git reset --hard Origin/master (thay thế 'master' bằng bất kỳ nhánh nào bạn đang làm việc và chạy git fetch Origin trước)

23
tiho

Một cách dễ dàng hơn là:

git checkout --theirs /path/to/file.extension
git pull Origin master

Điều này sẽ ghi đè tệp cục bộ của bạn với tệp trên git

20
maximus 69

Có vẻ như hầu hết các câu trả lời ở đây đều tập trung vào nhánh master; tuy nhiên, có những lúc tôi làm việc trên cùng một nhánh tính năng ở hai nơi khác nhau và tôi muốn một cuộc nổi loạn ở một nơi sẽ được phản ánh ở nơi khác mà không phải nhảy qua nhiều vòng.

Dựa trên sự kết hợp của câu trả lời của RNAcâu trả lời của torek cho một câu hỏi tương tự , tôi đã đưa ra câu trả lời tuyệt vời này:

git fetch
git reset --hard @{u}

Chạy cái này từ một nhánh và nó sẽ chỉ đặt lại nhánh cục bộ của bạn thành phiên bản ngược dòng.

Điều này cũng có thể được đưa vào một bí danh git (git forcepull):

git config alias.forcepull "!git fetch ; git reset --hard @{u}"

Hoặc, trong tệp .gitconfig của bạn:

[alias]
  forcepull = "!git fetch ; git reset --hard @{u}"

Thưởng thức!

20
JacobEvelyn

Tôi đã có cùng một vấn đề và vì một số lý do, ngay cả một git clean -f -d cũng không làm được. Đây là lý do: Vì một số lý do, nếu tệp của bạn bị Git bỏ qua (thông qua mục nhập .gitignore, tôi giả sử), nó vẫn phiền về việc ghi đè lên điều này bằng pull, nhưng sẽ không sạch xóa nó, trừ khi bạn thêm -x.

19
Tierlieb

Tôi chỉ tự giải quyết điều này bằng cách:

git checkout -b tmp # "tmp" or pick a better name for your local changes branch
git add -A
git commit -m 'tmp'
git pull
git checkout master # Or whatever branch you were on originally
git pull
git diff tmp

trong đó lệnh cuối cùng đưa ra một danh sách những thay đổi cục bộ của bạn. Tiếp tục sửa đổi nhánh "tmp" cho đến khi được chấp nhận và sau đó hợp nhất trở lại vào master với: 

git checkout master && git merge tmp

Lần sau, có lẽ bạn có thể xử lý việc này theo cách sạch hơn bằng cách tra cứu "nhánh git stash" mặc dù stash có thể gây rắc rối cho bạn trong vài lần thử đầu tiên, vì vậy hãy thử nghiệm đầu tiên trên một dự án không quan trọng.

18
Simon B.

Tôi có một tình huống kỳ lạ là cả git clean hoặc git reset đều không hoạt động. Tôi phải xóa tệp xung đột khỏi git index bằng cách sử dụng tập lệnh sau trên mỗi tệp không bị theo dõi:

git rm [file]

Sau đó tôi có thể kéo tốt.

17
Chen Zhang

Tôi biết một phương pháp dễ dàng hơn và ít đau đớn hơn:

$ git branch -m [branch_to_force_pull] tmp
$ git fetch
$ git checkout [branch_to_force_pull]
$ git branch -D tmp

Đó là nó!

16
ddmytrenko

Bốn lệnh này làm việc cho tôi.

git reset --hard HEAD
git checkout Origin/master
git branch -D master
git checkout -b master

Để kiểm tra/kéo sau khi thực hiện các lệnh này

git pull Origin master

Tôi đã thử rất nhiều nhưng cuối cùng cũng thành công với những lệnh này.

13
vishesh chandra

Cứ làm đi

git fetch Origin branchname
git checkout -f Origin/branchname // This will overwrite ONLY new included files
git checkout branchname
git merge Origin/branchname

Vì vậy, bạn tránh tất cả các tác dụng phụ không mong muốn, như xóa các tệp hoặc thư mục bạn muốn giữ, v.v.

12
user2696128

Mặc dù câu hỏi ban đầu, các câu trả lời hàng đầu có thể gây ra vấn đề cho những người gặp vấn đề tương tự, nhưng không muốn mất các tệp cục bộ của họ. Ví dụ: xem ý kiến ​​của Al-Punk và crizCraig. 

Phiên bản sau đây cam kết các thay đổi cục bộ của bạn thành một nhánh tạm thời (tmp), kiểm tra nhánh ban đầu (mà tôi giả sử là master) và hợp nhất các bản cập nhật. Bạn có thể làm điều này với stash, nhưng tôi thấy việc sử dụng phương pháp hợp nhất/hợp nhất thường dễ dàng hơn.

git checkout -b tmp
git add *; git commit -am "my temporary files"
git checkout master

git fetch Origin master
git merge -s recursive -X theirs Origin master

trong đó chúng tôi giả sử kho lưu trữ khác Origin master.

12
Snowcrash

Đặt lại chỉ mục và đầu thành Origin/master, nhưng không đặt lại cây làm việc:

git reset Origin/master
11
user811773

Yêu cầu:

  1. Theo dõi những thay đổi cục bộ để không ai ở đây mất chúng.
  2. Làm cho kho lưu trữ cục bộ khớp với kho lưu trữ Origin từ xa.

Dung dịch:

  1. Stash thay đổi cục bộ.
  2. Tìm nạp với một sạch trong số tệpthư mục bỏ qua .gitignorethiết lập lại cứng đến Nguồn gốc.

    git stash --include-untracked
    git fetch --all
    git clean -fdx
    git reset --hard Origin/master
    
9
vezenkov

Tôi đọc qua tất cả các câu trả lời nhưng tôi đang tìm kiếm một lệnh duy nhất để làm điều này. Đây là những gì tôi đã làm. Đã thêm bí danh git vào .gitconfig

[alias]
      fp = "!f(){ git fetch ${1} ${2} && git reset --hard ${1}/${2};};f"

Chạy lệnh của bạn như 

git fp Origin master

tương đương với

git fetch Origin master
git reset --hard Origin/master
9
Venkat Kotra

Đừng sử dụng git reset --hard. Điều đó sẽ xóa sạch những thay đổi của họ mà có thể hoàn toàn không mong muốn. Thay thế:

git pull
git reset Origin/master
git checkout <file1> <file2> ...

Tất nhiên bạn có thể sử dụng git fetch thay vì git pull vì rõ ràng nó sẽ không hợp nhất, nhưng nếu bạn thường kéo nó sẽ có ý nghĩa để tiếp tục kéo ở đây.

Vì vậy, điều xảy ra ở đây là git pull cập nhật tham chiếu Origin/master của bạn ; git reset cập nhật tham chiếu chi nhánh địa phương của bạn trên giống với Origin/master mà không cập nhật bất kỳ tệp nào, vì vậy trạng thái thanh toán của bạn không thay đổi; sau đó git checkout hoàn nguyên các tệp về trạng thái chỉ mục nhánh cục bộ của bạn khi cần. Trong trường hợp chính xác cùng một tệp đã được thêm vào trực tiếp và trên dòng chính, chỉ mục đã khớp với tệp sau khi đặt lại, vì vậy trong trường hợp phổ biến, bạn không cần phải làm git checkout.

Nếu nhánh ngược dòng cũng chứa các xác nhận mà bạn muốn áp dụng tự động, bạn có thể thực hiện theo một biến thể tinh tế trong quy trình:

git pull
git merge <commit before problem commit>
git reset <problem commit>
git checkout <file1> <file2> ...
git pull
8
Jim Driscoll

Đây là cách thực hành tốt nhất để hoàn nguyên các thay đổi:

  • git commit Cam kết các thay đổi theo giai đoạn của bạn để chúng sẽ được lưu trong reflog (xem bên dưới)
  • git fetch Lấy các thay đổi ngược dòng mới nhất
  • git reset --hard Origin/master Đặt lại cứng vào nhánh Master gốc

reflogghi lại các nhánh và các tham chiếu khác đang được cập nhật trong kho lưu trữ cục bộ. Hoặc đơn giản chỉ cần đặt - refloghistory của các thay đổi của bạn.

Vì vậy, nó luôn luôn là một thực hành tuyệt vời để cam kết. Các cam kết được thêm vào reflog để đảm bảo bạn sẽ luôn có cách lấy lại mã đã bị xóa.

7
Jordan Georgiev

Tôi đã sử dụng lệnh này để loại bỏ các tệp cục bộ ngăn tôi thực hiện thao tác kéo/hợp nhất. Nhưng hãy cẩn thận! Trước tiên hãy chạy git merge … để xem liệu chỉ có những tệp bạn thực sự muốn xóa hay không.

git merge Origin/master 2>&1 >/dev/null | grep ^[[:space:]] | sed s/^[[:space:]]//g | xargs -L1 rm
  • git merge liệt kê trong số những thứ khác tất cả các tệp đó. Chúng được chuẩn bị bởi một số khoảng trắng.
  • 2>&1 >/dev/null chuyển hướng đầu ra lỗi thành tiêu chuẩn để nó được chọn bởi grep.
  • grep ^[[:space:]] chỉ lọc các dòng có tên tệp.
  • sed s/^[[:space:]]//g cắt khoảng trắng ngay từ đầu.
  • xargs -L1 rm gọi rm trên mỗi tệp đó, xóa chúng.

Xử lý cẩn thận: Bất kể đầu ra git merge nào, rm sẽ được gọi cho mọi bắt đầu bằng khoảng trắng.

5
Glutexo

Tôi đã cố gắng sử dụng nhánh Material2 trên Angular2-Webpack-Starter và có một chút thời gian. Đây là cách duy nhất tôi có thể tải xuống và sử dụng chi nhánh đó.

git clone --depth 1 https://github.com/angularclass/angular2-webpack-starter.git

cd angular2-webpack-starter/

git checkout -b material2

Mở thư mục dự án và xóa tất cả các tệp và thư mục không bị ẩn. Để lại tất cả những người ẩn.

git add .

git commit -m "pokemon go"

git reset --hard

git pull Origin material2

(Khi trình chỉnh sửa bật lên, nhấn ': wq', rồi nhấn Enter)

Bây giờ bạn đã sẵn sàng.

5
Helzgate

Trên Windows, thực hiện lệnh này:

git fetch --all & git reset --hard Origin/master
3
Luca C.

Bạn có thể bỏ qua tệp đó với một tệp trong thư mục cơ sở dự án của bạn:

.gitignore

public/images/*

Sau đó kéo các thay đổi và sau đó xóa dòng đó khỏi tệp gitignore của bạn.

3
Daniel Gaytán

git fetch --all && git reset --hard Origin/master && git pull

0
Suge

1: Đặt lại về một cam kết trước đó

git reset --hard HEAD

2: Xóa các tệp không bị theo dõi

git clean -f

3: Kéo cam kết

git pull

Nguồn:

0
abhijithvijayan

Bạn có thể thử

git pull --force

nếu bạn muốn ghi đè lên tất cả các tệp cục bộ

0
Ultan Kearns
git fetch --all

sau đó nếu bạn ở trên nhánh chính

git reset --hard Origin/master

else

git reset --hard Origin/master<branch_name>
0
SUJITKUMAR SINGH

nếu bạn muốn đặt lại về nhánh theo dõi từ xa theo cách chung, hãy sử dụng:

git fetch
git reset --keep Origin/$(git rev-parse --abbrev-ref HEAD)

nếu bạn muốn đặt lại các thay đổi cục bộ của mình:

git fetch
git reset --hard Origin/$(git rev-parse --abbrev-ref HEAD)
0
warch