Pertanyaan Atur ulang cabang repositori lokal menjadi seperti KEPALA repositori jauh


Bagaimana cara mereset cabang lokal saya menjadi seperti cabang pada repositori jarak jauh?

Aku melakukannya:

git reset --hard HEAD

Tetapi ketika saya menjalankan git status,

On branch master
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)
      modified:   java/com/mycompany/TestContacts.java
      modified:   java/com/mycompany/TestParser.java

Bisakah Anda memberi tahu saya mengapa saya memiliki ini 'dimodifikasi'? Saya belum menyentuh file-file ini? Jika saya melakukannya, saya ingin menghapusnya.


2515
2017-10-27 00:27


asal


Jawaban:


Mengatur cabang Anda agar cocok dengan cabang jarak jauh dapat dilakukan dalam dua langkah:

git fetch origin
git reset --hard origin/master

Jika Anda ingin menyimpan keadaan cabang Anda saat ini sebelum melakukan ini (berjaga-jaga), Anda dapat melakukan:

git commit -a -m "Saving my work, just in case"
git branch my-saved-work

Sekarang pekerjaan Anda disimpan di cabang "my-saved-work" jika Anda memutuskan Anda menginginkannya kembali (atau ingin melihatnya nanti atau memisahkannya dengan cabang Anda yang diperbarui).

Perhatikan bahwa contoh pertama mengasumsikan bahwa nama repo remote adalah "origin" dan bahwa cabang bernama "master" di repo jarak jauh cocok dengan cabang yang saat ini dicentang keluar di repo lokal Anda.

BTW, situasi yang Anda hadapi ini terlihat sangat mirip seperti kasus umum di mana push telah dilakukan ke dalam cabang repositori non-kosong yang saat ini diperiksa. Apakah Anda baru-baru ini mendorong ke repo lokal Anda? Jika tidak, maka jangan khawatir - sesuatu yang lain pasti menyebabkan file-file ini secara tidak terduga akhirnya dimodifikasi. Jika tidak, Anda harus menyadari bahwa tidak disarankan untuk mendorong ke repositori yang tidak kosong (dan tidak ke dalam cabang yang saat ini dicentang, khususnya).


4460
2017-10-27 01:44



Saya perlu melakukan (solusi dalam jawaban yang diterima):

git fetch origin
git reset --hard origin/master

Diikuti oleh:

git clean -f

untuk menghapus file lokal

Untuk melihat file apa yang akan dihapus (tanpa benar-benar menghapusnya):

git clean -n -f

250
2017-12-27 06:20



Pertama, reset ke yang sebelumnya diambil HEAD dari cabang hulu yang sesuai:

git reset --hard @{u}

Keuntungan menentukan @{u} atau bentuk verbose nya @{upstream} adalah bahwa nama repo dan cabang jarak jauh tidak harus secara eksplisit ditentukan.

Selanjutnya, jika diperlukan, hapus file yang tidak terlacak, secara opsional juga dengan -x:

git clean -df

Akhirnya, jika diperlukan, dapatkan perubahan terbaru:

git pull

118
2018-02-10 20:27



git reset --hard HEAD sebenarnya hanya me-reset ke keadaan komitmen terakhir. Dalam hal ini KEPALA mengacu pada KEPALA cabang Anda.

Jika Anda memiliki beberapa komit, ini tidak akan berhasil ..

Apa yang mungkin ingin Anda lakukan, di-reset ke kepala asal atau apa pun yang Anda sebut dengan remote repository. Saya mungkin hanya melakukan sesuatu seperti

git reset --hard origin/HEAD

Namun berhati-hatilah. Pengaturan ulang yang sulit tidak dapat dibatalkan dengan mudah. Lebih baik untuk melakukan seperti yang disarankan Dan, dan bercabang dari salinan perubahan Anda sebelum mengatur ulang.


91
2017-10-27 01:08



Semua saran di atas memang benar, tetapi sering sangat ulang proyek Anda, Anda juga perlu menghapus bahkan file yang ada di Anda .gitignore.

Untuk mendapatkan kesetaraan moral menghapus direktori proyek Anda dan mengkloning ulang dari remote adalah:

git fetch
git reset --hard
git clean -x -d -f

PERINGATAN: git clean -x -d -f aku s tidak dapat diubah dan Anda dapat kehilangan file dan data (misalnya hal-hal yang telah Anda abaikan .gitignore).


57
2017-07-23 17:48



Pertanyaannya mencampur dua masalah di sini:

  1. cara mereset cabang lokal ke titik di mana remote berada
  2. bagaimana membersihkan area stage Anda (dan mungkin direktori kerja), jadi itu git statuskata nothing to commit, working directory clean.

Jawaban satu-stop adalah:

  1. git fetch --prune  (opsional) Memperbarui snapshot lokal dari repo jarak jauh. Perintah lebih lanjut hanya bersifat lokal.
    git reset --hard @{upstream}Menempatkan pointer cabang lokal ke tempat snapshot remote, serta mengatur indeks dan direktori kerja ke file yang melakukan.
  2. git clean -d --force  Menghapus file dan direktori yang tidak terlacak yang menghalangi git untuk mengatakan "direktori kerja bersih".

29
2018-01-31 01:29



Ini adalah sesuatu yang saya hadapi secara teratur, & saya telah menggeneralisasi skrip Wolfgang yang disediakan di atas untuk bekerja dengan cabang apa pun

Saya juga menambahkan prompt "apakah Anda yakin", & beberapa hasil umpan balik

#!/bin/bash
# reset the current repository
# WF 2012-10-15
# AT 2012-11-09
# see http://stackoverflow.com/questions/1628088/how-to-reset-my-local-repository-to-be-just-like-the-remote-repository-head
timestamp=`date "+%Y-%m-%d-%H_%M_%S"`
branchname=`git rev-parse --symbolic-full-name --abbrev-ref HEAD`
read -p "Reset branch $branchname to origin (y/n)? "
[ "$REPLY" != "y" ] || 
echo "about to auto-commit any changes"
git commit -a -m "auto commit at $timestamp"
if [ $? -eq 0 ]
then
  echo "Creating backup auto-save branch: auto-save-$branchname-at-$timestamp"
  git branch "auto-save-$branchname-at-$timestamp" 
fi
echo "now resetting to origin/$branchname"
git fetch origin
git reset --hard origin/$branchname

20
2017-11-09 13:01



Berikut ini skrip yang mengotomatiskan jawaban yang paling populer ... Lihat https://stackoverflow.com/a/13308579/1497139 untuk versi perbaikan yang mendukung cabang

#!/bin/bash
# reset the current repository
# WF 2012-10-15
# see https://stackoverflow.com/questions/1628088/how-to-reset-my-local-repository-to-be-just-like-the-remote-repository-head
timestamp=`date "+%Y-%m-%d-%H_%M_%S"`
git commit -a -m "auto commit at $timestamp"
if [ $? -eq 0 ]
then
  git branch "auto-save-at-$timestamp" 
fi
git fetch origin
git reset --hard origin/master

11
2017-10-15 08:50



Asalkan repositori jauh origin, dan Anda tertarik branch_name:

git fetch origin
git reset --hard origin/<branch_name>

Juga, Anda pergi untuk mengatur ulang cabang saat ini origin untuk HEAD.

git fetch origin
git reset --hard origin/HEAD

Bagaimana itu bekerja:

git fetch origin unduh yang terbaru dari jauh tanpa mencoba menggabungkan atau me-rebase apa pun.

Maka itu git reset menyetel ulang <branch_name> cabang ke apa yang baru saja Anda ambil. Itu --hard opsi mengubah semua file di pohon kerja Anda untuk dicocokkan dengan file origin/branch_name.


11
2018-05-08 11:12