Saya mereset master lokal saya ke komit dengan perintah ini:
git reset --hard e3f1e37
ketika saya memasukkan $ git status
perintah, terminal mengatakan:
# On branch master
# Your branch is behind 'origin/master' by 7 commits, and can be fast-forwarded.
# (use "git pull" to update your local branch)
#
nothing to commit, working directory clean
Karena saya ingin mengatur ulang origin / header juga, saya checkout ke origin / master:
$ git checkout origin/master
Note: checking out 'origin/master'.
You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by performing another checkout.
If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -b with the checkout command again. Example:
git checkout -b new_branch_name
HEAD is now at 2aef1de... master problem fixed for master. its okay now.
dan setel ulang tajuk dengan perintah ini:
$ git reset --hard e3f1e37
HEAD is now at e3f1e37 development version code incremented for new build.
Kemudian saya mencoba menambahkan commit ke origin / header yang saya tidak berhasil.
$ git commit -m "Reverting to the state of the project at e3f1e37"
# HEAD detached from origin/master
nothing to commit, working directory clean
Akhirnya, saya checkout ke master lokal saya.
$ git checkout master
Switched to branch 'master'
Your branch is behind 'origin/master' by 7 commits, and can be fast-forwarded.
(use "git pull" to update your local branch)
Karena, saya mengatur ulang kepala asal / master yang saya harapkan lokal dan asal harus di arah yang sama tetapi seperti yang Anda lihat, git mengatakan bahwa lokal / master saya di belakang asal / master dengan 7 komit.
Bagaimana saya bisa memperbaiki masalah ini? Hal-hal yang saya cari adalah Kepala / master dan asal / master point untuk komit yang sama. Gambar berikut menunjukkan apa yang saya lakukan. Terima kasih.
sumber
Jawaban:
origin/xxx
cabang selalu pointer ke remote. Anda tidak dapat memeriksanya karena mereka bukan penunjuk ke repositori lokal Anda (Anda hanya memeriksa komit. Itulah sebabnya Anda tidak akan melihat nama yang ditulis dalam penanda cabang antarmuka baris perintah, hanya hash komit).Yang perlu Anda lakukan untuk memperbarui remote adalah memaksa mendorong perubahan lokal Anda untuk dikuasai:
sumber
remote: error: denying non-fast-forward refs/heads/master (you should pull first)
Solusi yang ditemukan di sini membantu kami memperbarui master ke komit sebelumnya yang telah didorong:
Perbedaan utama dari jawaban yang diterima adalah hash komit "e3f1e37:" sebelum master dalam perintah push.
sumber
remote: error: denying non-fast-forward refs/heads/master (you should pull first)
you should pull first
:)git config receive.denynonfastforwards false
tetapi sebenarnya saya mengaturnya secara manual di repositori git lokal saya yang saya miliki/opt/git
yang saya buat untuk bermain dengan ide-ide di sini. Saya tidak yakin bagaimana atau apakah dapat melakukan ini untuk bitbucket, github dll ... Dan @intuitivepixel tidak ada gunanya karena membalikkan apa yang ingin Anda capai dengan hard reset.Dengan asumsi bahwa cabang Anda dipanggil di
master
sini dan dari jarak jauh, dan bahwa kendali jarak jauhorigin
Anda disebut dapat Anda lakukan:Namun, Anda harus menghindari melakukan ini jika ada orang lain yang bekerja dengan repositori jarak jauh Anda dan telah menarik perubahan Anda. Dalam hal ini, akan lebih baik untuk mengembalikan komit yang tidak Anda inginkan, kemudian dorong seperti biasa.
sumber
Karena saya memiliki situasi yang sama, saya pikir saya akan membagikan situasi saya dan bagaimana jawaban ini membantu saya (terima kasih semuanya).
Jadi saya memutuskan untuk bekerja secara lokal dengan mengubah komit terakhir saya setiap kali saya ingin menyelamatkan kemajuan saya di cabang utama (saya tahu, saya seharusnya bercabang, berkomitmen pada hal itu, terus mendorong dan kemudian bergabung kembali untuk menguasai).
Suatu malam, dalam ketakutan paranoid kehilangan kemajuan saya untuk kegagalan perangkat keras atau sesuatu dari eter, saya memutuskan untuk mendorong master ke asal. Kemudian saya terus mengubah cabang master lokal saya dan ketika saya memutuskan sudah waktunya untuk mendorong lagi, saya dihadapkan dengan cabang-cabang master yang berbeda dan menemukan bahwa saya tidak dapat mengubah asal / hulu ( ya! ) Seperti saya dapat cabang pengembangan lokal.
Jadi saya tidak checkout master lokal karena saya sudah setelah komit. Tuan tidak berubah. Saya bahkan tidak perlu mengatur ulang --hard, komit saya saat ini OK.
Saya hanya dipaksa mendorong ke tempat asal, bahkan tanpa menentukan komit apa yang ingin saya paksa pada tuan karena dalam hal ini adalah apa pun KEPALA. Diperiksa
git diff master..origin/master
sehingga tidak ada perbedaan dan hanya itu. Semua sudah diperbaiki. Terima kasih! (Saya tahu, saya seorang pemula git, tolong maafkan!).Jadi, jika Anda sudah setuju dengan cabang master Anda secara lokal, cukup:
sumber