Apakah mungkin untuk melakukan git merge
, tetapi tanpa komitmen?
"man git merge" mengatakan ini:
With --no-commit perform the merge but pretend the merge failed and do not autocommit,
to give the user a chance to inspect and further tweak the merge result before
committing.
Tetapi ketika saya mencoba menggunakannya git merge
dengan --no-commit
itu masih auto-commit. Inilah yang saya lakukan:
$> ~/git/testrepo$ git checkout master
Switched to branch 'master'
$> ~/git/testrepo$ git branch
* master
v1.0
$> ~/git/testrepo$ git merge --no-commit v1.0
Updating c0c9fd2..18fa02c
Fast-forward
file1 | 1 +
1 files changed, 1 insertions(+), 0 deletions(-)
$> ~/git/testrepo$ git status
# On branch master
# Your branch is ahead of 'origin/master' by 1 commit.
#
nothing to commit (working directory clean)
Berikutnya git log
mengungkapkan semua komit dari cabang v1.0 digabung menjadi master.
--no-commit
saklar hanya efektif jika tidak ada konflik terjadi, dalam kasus konflik git tidak akan pernah melakukan komit otomatis.rm .git/MERGE_HEAD
sesudahnya, yang akan memaksa git untuk melupakan bahwa penggabungan itu terjadi.Automatic merge went well; stopped before committing as requested
git merge BRANCHENAME --no-commit --no-ff
meninggalkan ruang kerja saya dalam kondisi "MERGING" git. Tidak begitu yakin apa yang dikerjakannya dengan tepat, tetapi siklus sederhanagit stash save
dangit stash pop
tampaknya mengembalikan semuanya menjadi normal; hanya dengan file yang dimodifikasi dari cabang target di tempat sebagaimana dimaksud, dan tidak lagi status GABUNGAN.Anda salah paham arti penggabungan di sini.
The
--no-commit
mencegah MERGE COMMIT terjadi, dan itu hanya terjadi ketika Anda menggabungkan dua sejarah cabang yang berbeda; dalam contoh Anda itu tidak terjadi karena Git menunjukkan bahwa itu adalah gabungan "fast-forward" dan kemudian Git hanya menerapkan komit yang sudah ada di cabang secara berurutan.sumber
git help merge
=> "Dengan--no-commit
melakukan penggabungan tetapi berpura-pura penggabungan gagal dan tidak otomatis, untuk memberi pengguna kesempatan untuk memeriksa dan lebih lanjut mengubah hasil penggabungan sebelum melakukan. " Kuncinya tentu saja menggunakannya bersamaan dengan--no-ff
Jika Anda hanya ingin mengkomit semua perubahan dalam satu commit seolah-olah Anda mengetik sendiri, --squash juga akan melakukannya
sumber
git merge v1.0 --no-commit --no-ff
Saya lebih suka cara ini jadi saya tidak perlu mengingat parameter langka.
Kemudian akan mengatakan cabang Anda "
#
" di depan dengan komit, Anda sekarang dapat menghilangkan komit ini dan menempatkannya ke dalam perubahan kerja dengan yang berikut:Misalnya jika setelah penggabungan itu 1 komit di depan, gunakan:
Catatan: Di Windows, kutipan diperlukan. (Seperti yang dicatat Josh dalam komentar) misalnya:
sumber
git reset "@~1"
Ketika ada satu komit saja di cabang, biasanya saya lakukan
sumber