Rebase interaktif Git tidak ada komitmen untuk memilih


105

Saya di master dan saya lakukan rebase -i <my_branch>

Mendapatkan ini:

noop

# Rebase c947bec..7e259d3 onto c947bec
#
# Commands:
#  p, pick = use commit
#  r, reword = use commit, but edit the commit message
#  e, edit = use commit, but stop for amending
#  s, squash = use commit, but meld into previous commit
#  f, fixup = like "squash", but discard this commit's log message
#  x <cmd>, exec <cmd> = Run a shell command <cmd>, and stop if it fails
#
# If you remove a line here THAT COMMIT WILL BE LOST.
# However, if you remove everything, the rebase will be aborted.
#

Saya ingin memilih beberapa tidak semua karena beberapa di antaranya tidak diterima. Juga bagaimana Anda bekerja ketika Anda ingin menyimpan beberapa file atau perubahan selalu 'lokal' ke beberapa cabang? Apakah ada penolong seperti itu .gitignore?

Jawaban:


85

Seperti rebase non-interaktif, Anda harus melakukan rebase ke commit tertentu.

Dengan rebase non-interaktif, jika Anda menyediakan leluhur langsung dari komit saat ini, maka Anda tidak mengubah apa pun; dengan rebase interaktif Anda bisa mengedit komit setelah komit yang Anda rebasing ke, bahkan jika komit adalah leluhur langsung dari komit Anda saat ini tetapi Anda harus menentukan komit yang ingin Anda edit selanjutnya.

Saya tidak tahu detail situasi Anda, tetapi Anda mungkin menginginkan sesuatu seperti ini:

# Opportunity to edit or prune commits between origin/master and current branch
git rebase -i origin/master

atau

# Edit some of the last ten commits
git rebase -i HEAD~10 # Note that ~10 uses a tilde("~") not a dash("-"_) !

Menggunakan HEAD~*sintaks berhasil untuk saya tetapi yang pertama tidak.
Dev Yego

25

rebase -itanpa rentang komit tidak akan menampilkan komit apa pun. untuk me-rebase yang terakhir, katakanlah, 7 komit, gunakan yang berikut:

git rebase -i HEAD~7

Berhati-hatilah karena ini akan menulis ulang sejarah. jangan lakukan itu, jika komit sudah didorong


untuk pertanyaan kedua Anda: miliki cabang dengan perubahan Anda (pada dasarnya adalah cabang konfigurasi) dan secara teratur gabungkan cabang lain ke dalamnya. dengan cara ini perubahan tidak akan berpindah ke cabang lain


9

Saat Anda menggunakan git rebase -i, Anda biasanya harus menentukan, sejak komit mana yang Anda inginkan untuk melakukan rebase. Jadi, jika, misalnya, Anda ingin menghapus beberapa komit di antara 10 terakhir ke cabang saat ini, Anda akan melakukan:

git rebase -i HEAD~10

6

Seperti yang telah disebutkan orang lain, Anda perlu menentukan rentang komit.

git rebase -i <latest-commit-to-be-retained>

(Dengan asumsi bahwa Anda berada di cabang yang sama dengan komit untuk diedit) -

Untuk menentukan komit, Anda dapat menggunakan HEAD ~ 5 singkatan atau menggunakan sha checksum (yang bisa Anda dapatkan git log)

Sebenarnya setiap komit akan dilakukan jika itu adalah prior / leluhur dari komit yang ingin Anda hapus / edit / reword di pohon. Ini akan mencantumkan semua komit sejak <latest-commit-to-be-retained>di editor (ditentukan dalam konfigurasi git Anda). Dari daftar, untuk menghapus komit, hapus saja baris tersebut, simpan dan keluar (vi habbits :)) file + editor, dan lakukangit rebase --continue

Untuk jawaban kedua, saya setuju dengan knittl

memiliki cabang dengan perubahan Anda (pada dasarnya adalah cabang konfigurasi) dan secara teratur menggabungkan cabang lain ke dalamnya. dengan cara ini perubahan tidak akan berpindah ke cabang lain

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.