pengembangan-web-mp-pd.com

Beralih ke cabang lain tanpa mengubah file ruang kerja

Saya mengkloning repositori git dari GitHub, membuat beberapa perubahan dan beberapa komitmen; Saya membuat cukup banyak dan semuanya sangat kotor, sehingga tidak cocok untuk permintaan tarik. Sekarang saya membuat cabang cleanchanges dari Origin/master, jadi bersih, dan saya ingin melakukan perubahan di sana sebagai satu komit dengan komentar komit yang bagus.

Ketika saya berada di master lokal, saya ingin beralih ke cleanchanges saya tetapi tanpa mengubah file. Dan kemudian saya bisa berkomitmen.

Bagaimana saya bisa mengganti cabang tanpa mengubah file?

Saya ingin menjelaskan: Saya memiliki semua perubahan yang dilakukan di master lokal. Tidak ada perubahan yang tidak dikomit.

55
amorfis

Edit: Saya baru saja memperhatikan bahwa Anda mengatakan telah membuat beberapa komitmen. Dalam hal ini, gunakan git merge --squash untuk membuat satu komit:

git checkout cleanchanges
git merge --squash master
git commit -m "Nice commit comment for all my changes"

( Edit: Jawaban berikut berlaku jika Anda memiliki perubahan tidak berkomitmen

Ganti cabang dengan git checkout cleanchanges. Jika cabang merujuk ke ref yang sama, maka semua perubahan yang tidak dikomit Anda akan disimpan dalam direktori kerja Anda saat Anda beralih.

Satu-satunya saat Anda akan mengalami konflik adalah jika beberapa file dalam repositori berbeda antara Origin/master dan cleanchanges. Jika Anda baru saja membuat cabang, maka tidak ada masalah.

Seperti biasa, jika Anda khawatir kehilangan pekerjaan, buat salinan cadangan terlebih dahulu. Git dirancang untuk tidak membuang pekerjaan tanpa meminta Anda terlebih dahulu.

52
Greg Hewgill

Git. Beralih ke cabang lain

git checkout branch_name
35

Taruhan terbaik adalah untuk simpanan perubahan dan beralih cabang. Untuk berpindah cabang, Anda perlu kondisi bersih. Jadi simpanan mereka, checkout cabang baru dan terapkan perubahan pada cabang baru dan lakukan

7
vivek85

Cara lain, jika Anda ingin membuat komit baru alih-alih melakukan penggabungan:

git checkout cleanchanges
git reset --hard master
git reset cleanchanges

git status
git add .
git commit

Reset pertama (hard) akan mengatur pohon kerja Anda sama dengan komit terakhir di master.

Reset kedua akan menempatkan HEAD Anda kembali ke tempat semula, menunjuk ke ujung cabang cleanchanges, tetapi tanpa mengubah file apa pun. Jadi sekarang Anda dapat menambahkan dan mengkomitnya.


Setelah itu, jika Anda ingin menghapus komit kotor yang Anda buat dari master (dan dengan asumsi Anda belum mendorongnya), Anda dapat:

git checkout master
git reset --hard Origin/master

Ini akan membuang semua komit baru Anda, mengembalikan cabang master lokal Anda ke komit yang sama dengan yang ada di repositori.

1
joeytwiddle

Sepertinya Anda membuat perubahan, mengkomitnya untuk dikuasai sepanjang jalan, dan sekarang Anda ingin menggabungkannya menjadi satu komit.

Jika demikian, Anda ingin rebase melakukan Anda, menekannya menjadi satu komit. 

Saya tidak sepenuhnya yakin dengan apa yang sebenarnya Anda inginkan, jadi saya tidak akan menggoda Anda dengan naskah. Tapi saya sarankan Anda membaca di git rebase dan opsi untuk "squash" ing, dan coba beberapa hal.

1
timdev

Mengapa tidak git reset --soft <branch_name> saja?

Demonstrasi:

mkdir myrepo; cd myrepo; git init
touch poem; git add poem; git commit -m 'add poem'  # first commit
git branch original
echo bananas > poem; git commit -am 'change poem'  # second commit
echo are tasty >> poem  # unstaged change
git reset --soft original

Hasil:

$ git diff --cached
diff --git a/poem b/poem
index e69de29..9baf85e 100644
--- a/poem
+++ b/poem
@@ -0,0 +1 @@
+bananas
$ git diff
diff --git a/poem b/poem
index 9baf85e..ac01489 100644
--- a/poem
+++ b/poem
@@ -1 +1,2 @@
 bananas
+are tasty

Satu hal yang perlu diperhatikan, adalah bahwa cabang saat ini berubah menjadi original. Anda masih pergi di cabang sebelumnya setelah proses, tetapi dapat dengan mudah git checkout original, karena itu keadaan yang sama. Jika Anda tidak ingin kehilangan HEAD sebelumnya, Anda harus mencatat referensi komit dan melakukan git branch -f <previous_branch> <commit> setelah itu.

0
Yushin Washio

Cara termudah untuk dilakukan adalah sebagai berikut:

git fetch && git checkout <branch_name>
0
Mandeep Singh