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?

Lukasz
sumber

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("-"_) !
CB Bailey
sumber
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

rajutan
sumber
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
svick.dll
sumber
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

0xc0de
sumber