Menempatkan perubahan yang tidak terikat pada Master ke cabang baru oleh Git

Jawaban:

151

Anda bisa checkout ke cabang tes dan kemudian melakukan. Anda tidak kehilangan perubahan tanpa komitmen saat pindah ke cabang lain.

Andaikata Anda berada di cabang utama:

git checkout test
git add .
git add deletedFile1
git add deletedFile2
...
git commit -m "My Custom Message"

Saya tidak begitu yakin tentang file yang dihapus, tapi saya kira mereka tidak termasuk ketika Anda menggunakan git add .

Samuel Carrijo
sumber
12
Kadang-kadang checkout akan gagal karena perubahan Anda bertentangan dengan cabang itu. Anda dapat mencoba checkout -m untuk bergabung.
Jouni K. Seppänen
2
Saya mencoba ini tetapi saya mendapat kesalahan: kesalahan: Perubahan lokal Anda ke file berikut akan ditimpa oleh checkout. Tolong, komit perubahan Anda atau sembunyikan sebelum Anda bisa berganti cabang.
ishwr
Meskipun ini akan berhasil, jawaban yang mengatakan menggunakan simpanan harus lebih disukai, IMO. Mungkin hanya pilihan pribadi, tetapi ini adalah alur kerja yang lebih bersih, secara logis dan memperkenalkan STASH yang merupakan perintah yang berguna.
Patrick
Opsi "-b" tidak ada, karena tajuk utama menyarankan bahwa pertanyaannya adalah mengenai cabang "baru".
Guntram
195

Anda juga dapat membuat cabang baru dan beralih ke sana dengan melakukan:

git checkout -b new_branch
git add .

Saya menggunakan ini sepanjang waktu karena saya selalu lupa untuk memulai cabang baru sebelum saya mulai mengedit kode.

Swanand
sumber
3
masalah yang sama seperti @jouni dicatat untuk jawaban lainnya - Anda dapat mengalami kesulitan menggabungkan cabang kembali ke master jika perubahan tambahan bertentangan dengan perubahan asli. IMO utas ini menjawab pertanyaan dengan lebih baik: stackoverflow.com/questions/556923/…
jpw
Singkat, manis dan meyakinkan ... "Saya menggunakan ini sepanjang waktu ..."
ϹοδεMεδιϲ
1
Jangan lupa untuk melakukan commit di new_branch. Jika Anda beralih kembali ke cabang master dan mengembalikan file yang diubah, Anda akan kehilangan mereka di new_branch juga.
petrsyn
36

Mengapa tidak menggunakan simpanan git saja. Saya pikir ini lebih intuitif seperti salin dan tempel.

$ git branch
  develop
* master
  feature1
  TEST
$

Anda memiliki beberapa file di cabang Anda saat ini yang ingin Anda pindahkan.

$ git status
# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#      modified:   awesome.py
#
# Changed but not updated:
#   (use "git add <file>..." to update what will be committed)
#
#      modified:   linez.py
#
$
$ git stash
Saved working directory and index state \
  "WIP on master: 934beef added the index file"
HEAD is now at 934beef added the index file
(To restore them type "git stash apply")
$
$ git status
# On branch master
nothing to commit (working directory clean)
$
$
$ git stash list
stash@{0}: WIP on master: 934beef ...great changes
$

Pindah ke cabang lain.

$ git checkout TEST

Dan melamar

$ git stash apply
# On branch master
# Changed but not updated:
#   (use "git add <file>..." to update what will be committed)
#
#      modified:   awesome.py
#      modified:   linez.py
#

Saya juga suka git stashkarena saya menggunakan git flow, yang mengeluh ketika Anda ingin menyelesaikan cabang fitur sementara masih ada perubahan di direktori kerja Anda.

Sama seperti @Mike Bethany, ini terjadi pada saya sepanjang waktu karena saya mengerjakan masalah baru sambil lupa bahwa saya masih di cabang lain. Jadi, Anda dapat menyimpan pekerjaan Anda git flow feature finish...,, dan git stash applyke git flow feature start ...cabang baru .

HeyWatchThis
sumber
2
git stashadalah cara yang saya sukai untuk berurusan dengan perubahan yang tidak dikomit. Ini tentu metode yang intuitif ketika Anda menganggapnya memotong dan menempel.
Matius Mitchell
Ini sepertinya pendekatan yang bagus untuk saya. Itu bekerja tanpa masalah.
Yunus Nedim Mehel
Tidak tahu Anda bisa melakukan ini dan itu bekerja dengan baik. Terasa sedikit lebih intuitif daripada metode lainnya.
glaucon
Saya pikir menyembunyikan itu cara yang lebih profesional, daripada menggunakan git checkout dan kemudian tambahkan. Saya pikir jawaban Anda harus 100+ suara.
Matrosov Alexander
1
@ Καrτhικgit stash --include-untracked
2Toad
5
git checkout TEST
git add file1 file2
git commit
Bombe
sumber