Jika saya memiliki n komit, bagaimana saya bisa bercabang dari komit n-3?
Saya bisa melihat hash dari setiap commit.
Anda dapat membuat cabang melalui hash:
git branch branchname <sha1-of-commit>
Atau dengan menggunakan referensi simbolis:
git branch branchname HEAD~3
Untuk checkout cabang saat membuatnya, gunakan
git checkout -b branchname <sha1-of-commit or HEAD~3>
Untuk melakukan ini di github.com:
Keajaiban dapat dilakukan dengan git reset .
Buat cabang baru dan alihkan ke sana (jadi semua komit terbaru Anda disimpan di sini)
git checkout -b your_new_branch
Beralih kembali ke cabang kerja sebelumnya (anggap masternya)
git checkout master
Hapus komit x terbaru, tetap bersihkan master
git reset --hard HEAD~x # in your case, x = 3
Mulai saat ini, semua x commit terakhir hanya ada di cabang baru, bukan di cabang kerja Anda sebelumnya (master).
Jika Anda tidak yakin komit mana yang ingin Anda cabut sebelumnya, Anda dapat memeriksa komit dan memeriksa kode mereka (lihat sumber, kompilasi, pengujian) dengan
git checkout <sha1-of-commit>
setelah Anda menemukan komit yang ingin Anda cabut dari Anda dapat melakukannya dari dalam komit (yaitu tanpa kembali ke master terlebih dahulu) hanya dengan membuat cabang dengan cara yang biasa:
git checkout -b <branch_name>
git checkout -b <branch-name> <sha1-of-commit>
Untuk melakukan ini di Eclipse:
Ini akan membuat cabang lokal untuk Anda. Kemudian setiap kali Anda Push perubahan Anda, cabang Anda akan didorong ke server jauh.
Anda dapat melakukannya di Stash.
Pertanyaan terkait yang bagus adalah: Bagaimana cara Anda mengetahuinya menggunakan opsi --help
dari git? Mari kita coba ini:
git branch --help
Kami melihat output ini:
NAME
git-branch - List, create, or delete branches
SYNOPSIS
git branch [--color[=<when>] | --no-color] [-r | -a]
[--list] [-v [--abbrev=<length> | --no-abbrev]]
[--column[=<options>] | --no-column]
[(--merged | --no-merged | --contains) [<commit>]] [--sort=<key>]
[--points-at <object>] [<pattern>...]
git branch [--set-upstream | --track | --no-track] [-l] [-f] <branchname> [<start-point>]
git branch (--set-upstream-to=<upstream> | -u <upstream>) [<branchname>]
git branch --unset-upstream [<branchname>]
git branch (-m | -M) [<oldbranch>] <newbranch>
git branch (-d | -D) [-r] <branchname>...
git branch --edit-description [<branchname>]
Gobbledegook.
Cari melalui teks berikutnya untuk kata "komit". Kami menemukan ini:
<start-point>
The new branch head will point to this commit. It may be given as a branch name, a
commit-id, or a tag. If this option is omitted, the current HEAD will be used instead.
Kami pergi ke suatu tempat!
Sekarang, fokuslah pada baris buku pegangan ini:
git branch [--set-upstream | --track | --no-track] [-l] [-f] <branchname> [<start-point>]
Padatkan itu untuk ini:
git branch <branchname> [<start-point>]
Dan selesai.
Saya bisa melakukannya seperti ini:
git branch new_branch_name `git log -n 1 --skip 3 --format=%H`
Di mana Anda harus memasukkan nilai lewati. 0 adalah yang terbaru, 1 adalah yang sebelumnya, 2 adalah komit sebelum itu, dll.
Cukup jalankan:
git checkout -b branch-name <commit>
Sebagai contoh :
git checkout -b import/january-2019 1d0fa4fa9ea961182114b63976482e634a8067b8
Perintah checkout
dengan parameter -b
akan membuat cabang baruDANia akan mengalihkan Anda ke sana
Inilah yang saya lakukan:
C:\Users\[path]\build>git checkout -b responsivenavigation 8a75b001096536b3216022484af3026aa9c7bb5b
Switched to a new branch 'responsivenavigation'
C:\Users\jaimemontoya\Dropbox\CuponClub\androidapp\build>git branch
master
* responsivenavigation
Dalam hal ini, 8a75b001096536b3216022484af3026aa9c7bb5b
adalah dan commit lama milik cabang master
.
Pergi ke komit tertentu dari repositori git
Terkadang ketika mengerjakan repositori git Anda ingin kembali ke komit (revisi) tertentu untuk mengambil snapshot proyek Anda pada waktu tertentu. Untuk melakukan itu semua yang Anda butuhkan, SHA-1 hash dari commit yang Anda dapat dengan mudah menemukan memeriksa log dengan perintah:
git log --abbrev-commit --pretty=oneline
yang akan memberi Anda daftar ringkas semua komitmen dan versi singkat dari hash SHA-1.
Sekarang Anda tahu hash dari commit yang ingin Anda tuju, Anda dapat menggunakan salah satu dari 2 perintah berikut:
git checkout HASH
atau
git reset --hard HASH
checkout
git checkout <commit> <paths>
Memberitahu git untuk mengganti status lintasan saat ini dengan statusnya di komit yang diberikan. Path dapat berupa file atau direktori.
Jika tidak ada cabang yang diberikan, git menganggap komit HEAD.
git checkout <path> // restores path from your last commit. It is a 'filesystem-undo'.
Jika tidak ada jalur yang diberikan, git memindahkan HEAD
ke komit yang diberikan (sehingga mengubah komit yang Anda duduki dan kerjakan).
git checkout branch //means switching branches.
reset
git reset <commit> //re-sets the current pointer to the given commit.
Jika Anda berada di cabang (biasanya Anda seharusnya), HEAD
dan cabang ini dipindahkan untuk berkomitmen.
Jika Anda dalam keadaan HEAD
terpisah, reset git hanya memindahkan HEAD
. Untuk mengatur ulang cabang, periksa dulu.
Jika Anda ingin tahu lebih banyak tentang perbedaan antara git reset dan checkout git saya akan merekomendasikan untuk membaca blog git resmi .
Untuk melakukan jawaban yang diterima di Visual Studio 2015 & 2017:
Klik perubahan (panah merah di atas)
Klik pada Tindakan (panah merah di atas) dan klik di Lihat Riwayat di Menu DropDown
Dan Tab baru akan terbuka:
Dan Anda harus mengklik kanan komit sebelumnya yang ingin kode Anda kembalikan ke:
Pilih untuk checkout cabang baru dan voila!
Di bawah, meskipun bukan bagian dari pertanyaan OP, tetapi saya sering melakukan keduanya dan ini adalah langkah jebakan, setidaknya bagi saya: jika Anda ingin kembali ke komit sebelumnya, tanpa checkout cabang baru, JANGAN memilih kembali (! ?); Anda harus memilih redefine --mixed atau --hard: