Rumah  >  Artikel  >  alat pembangunan  >  Membawa anda langkah demi langkah melalui arahan git yang paling biasa digunakan dalam 10 minit

Membawa anda langkah demi langkah melalui arahan git yang paling biasa digunakan dalam 10 minit

藏色散人
藏色散人ke hadapan
2021-08-27 14:04:152757semak imbas

Pada asasnya, Git boleh merekodkan perubahan pada teks, tetapi definisinya ialah sistem kawalan versi. Kemungkinan anda telah menggunakan git dalam satu cara atau yang lain: disebabkan sifat pengedarannya, ia merupakan standard de facto untuk kawalan versi kod, berbanding dengan Apache Subversion (SVN) terpusat.

Pasang git

Untuk menyemak sama ada Git dipasang, jalankan dalam terminal:

$ git version
git version 2.27.0.rc1.windows.1

Jika ia tidak dipasang, ikuti https:/ / Arahan di git-scm.com/downloads. Pengguna Mac boleh memasangnya menggunakan brew: brew install git.

Konfigurasikan git

Kami hanya perlu mengkonfigurasi beberapa perkara

git config --global user.name "前端小智" && # 你的名字
git config --global user.email johndoe@example.com && # 你的邮箱
git config --global init.defaultbranch main # 默认分支名称,与GitHub兼容

Anda boleh menggunakan arahan berikut untuk melihat konfigurasi global semasa

git config --global --list
# Type ":q" to close

Git menyimpan konfigurasi dalam teks biasa Jika anda mahu mengubah suainya secara langsung, anda boleh mengedit konfigurasi global secara terus dalam ~/.gitconfig atau ~/.config/git/config.

Seperti yang dicadangkan oleh arahan, mengalih keluar --global akan mengembangkan skop arahan ini ke folder semasa. Tetapi untuk menguji ini, kami memerlukan repositori.

Buat repositori baharu

Repositori hanyalah folder yang menyimpan semua yang ingin kita jejaki. Dicipta dengan arahan:

mkdir gitexample && 
cd gitexample && 
git init
# gitexample git:(main)

Arahan ini mencipta folder .git dalam folder gitexample. Folder .git tersembunyi ini ialah repositori: semua konfigurasi dan pengubahsuaian setempat disimpan di sini.

Tukar

untuk mencipta sesuatu dalam repositori:

echo "Hello, Git " >> hello.txt

Jalankan status git dan kami akan melihat bahawa fail yang baru dibuat tidak dijejaki.

git status
# On branch main
# 
# No commits yet
# 
# Untracked files:
#  (use "git add <file>..." to include in what will be committed)
#   hello.txt
#
# nothing added to commit but untracked files present (use "git add" to track)

Menurut cadangan gesaan, kami menambah fail:

git add .

Jika kami tidak mahu semua fail ditambahkan, kami boleh menggunakan

git add hello.txt

Jika anda menyemak versi sekarang Status pustaka, anda akan melihat bahawa fail telah ditambahkan (aka berperingkat), tetapi belum dilakukan lagi.

git status
# On branch main
# 
# No commits yet
# 
# Changes to be committed:
#  (use "git rm --cached <file>..." to unstage)
#   new file:   hello.txt

Untuk merekodkan perubahan ini, mari kita lakukannya.

git commit -m "Add hello.txt"
# [main (root-commit) a07ee27] Adds hello.txt
# 1 file changed, 2 insertions(+)
# create mode 100644 hello.txt

git commit -m a195b89f7911c4d642d1f1149788e37a Anda boleh menggunakan git commit untuk membuka editor (terutamanya vim) dan memberikan penerangan komit yang terperinci.

Semak sejarah komit:

git log
# Author: qq449245884 <44924566884@qq.com>
# Date:   Sat Jul 17 14:57:24 2021 +0800
#
#    Add hello.txt
#

Buat cawangan

Dalam banyak kes, adalah berguna untuk mempunyai versi berasingan kod awal anda : Sebagai contoh, semasa menguji kefungsian yang anda tidak pasti, atau mengelakkan konflik kod apabila bekerja bersama. Itulah sebenarnya cawangan git: ia tumbuh dari titik tertentu dalam sejarah.

Untuk mencipta cawangan, jalankan git branch NAME, untuk menukar cawangan, jalankan git checkout NAME. Atau hanya

git checkout -b dev # 切换到一个名为“dev”的新分支
# Switched to a new branch &#39;dev&#39;
# gitexample git:(dev)

Kami menukar sesuatu dalam fail Hello.txt dan melakukan perubahan:

echo "\nHello, Git Branch" >> hello.txt &&
git commit -am "Change hello.txt"

Sekarang, tukar ke cawangan induk:

git checkout main &&
cat hello.txt
# Switched to branch &#39;main&#39;
# Hello, Git

Seperti yang anda lihat, kandungan fail masih sama seperti sebelum ini. Untuk membandingkan cawangan yang kita boleh jalankan.

git diff dev
# diff --git a/hello.txt b/hello.txt
# index 360c923..b7aec52 100644
# --- a/hello.txt
# +++ b/hello.txt
# @@ -1,3 +1 @@
# Hello, Git
# -
# -Hello, Git Branch
# (END)
# type ":q" to close

Kami membuat perubahan dalam cawangan induk:

echo "\nHi from Main Branch" >> hello.txt &&
git commit -am "Change hello.txt from main"
# [main 9b60c4b] Change hello.txt from main
# 1 file changed, 2 insertions(+)

Sekarang mari cuba menggabungkan perubahan ini.

git merge dev
# Auto-merging hello.txt
# CONFLICT (content): Merge conflict in hello.txt
# Automatic merge failed; fix conflicts and then commit the result.

Oleh kerana fail itu telah diubah suai dua kali di tempat yang sama, kami mengalami konflik. Lihat fail ini

cat hello.txt
<<<<<<< HEAD
Hello, Git
Hi from Main Branch
=======
Hello, Git
>>>>>>> dev

Terdapat juga arahan untuk melihat perubahan secara individu:

git diff --ours # :q to close 
git diff --theirs #:q to close

Anda boleh mengedit fail secara manual dan melakukan perubahan, tetapi mari bayangkan bahawa kami hanya mahu versi a. Mari kita mulakan dengan membatalkan gabungan.

git merge --abort

dan mulakan semula gabungan dengan strategi "mereka", yang bermaksud bahawa sekiranya berlaku konflik, kami akan menggunakan perkara yang dipegang oleh cawangan masuk.

git merge -X theirs dev
# Auto-merging hello.txt
# Merge made by the &#39;recursive&#39; strategy.
# hello.txt | 5 +----
# 1 file changed, 1 insertion(+), 4 deletions(-)

Kebalikan daripada strategi ini ialah "milik kita". Menggabungkan kedua-dua perubahan ini bersama memerlukan penyuntingan manual (atau menggunakan git mergetool).

Lihat senarai semua larian cawangan

git branch # type :q to close
#  dev
# * main

Akhir sekali, padamkan larian cawangan:

git branch -d dev
# Deleted branch dev (was 6259828).

Tetapkan semula cawangan

Cawangan "tumbuh" dari titik tertentu dalam sejarah git, dan pangkalan semula membenarkan titik ini ditukar. Mari buat cawangan lain dan tambahkan beberapa perubahan pada hello.txt.

git checkout -b story &&
echo "Once upon a time there was a file">>story.txt &&
git add story.txt &&
git commit -m "Add story.txt"
# Switched to a new branch &#39;story&#39;
# [story eb996b8] Add story.txt
# 1 file changed, 1 insertion(+)
# create mode 100644 story.txt

Sekarang, kita kembali ke cawangan utama dan menambah perubahan:

git checkout main &&
echo "Other changes" >> changes.txt &&
git add changes.txt &&
git commit -m "Add changes.txt"

Tetapkan semula perubahan yang kami buat dalam cawangan utama kepada cerita:

git checkout story &&
git rebase main
# Successfully rebased and updated refs/heads/story.

Anda boleh melihat bahawa fail baharu yang dibuat dalam cawangan induk ditambahkan pada cawangan cerita.

ls
# changes.txt hello.txt   story.txt

Nota: Jangan letakkan semula cawangan yang mungkin digunakan oleh orang lain, seperti cawangan induk. Juga, ingat bahawa setiap operasi sejarah pada repositori jauh perlu memaksa pengubahsuaian ini berkuat kuasa.

Repositori jauh

Jika anda belum mempunyai satu lagi, buat akaun GitHub, log masuk dan buat repositori kosong baharu (peribadi atau awam).

Dengan mengandaikan nama repositori ialah "contoh", jalankan arahan berikut (tukarnya kepada nama pengguna anda).

git remote add origin git@github.com:USERNAME/example.git &&
git push -u origin main

Anda boleh memuat semula halaman untuk melihat fail dalam cawangan induk. Untuk menolak semua cawangan tempatan ke repositori jauh, jalankan.

git push --all origin

Mari edit sesuatu di GitHub: cuma klik pada mana-mana fail dan ikon pensel. Tambahkan baris mana-mana teks yang anda mahu dan tekan "Serahkan Perubahan."

Jalankan arahan ini secara setempat untuk mendapatkan perubahan dari jauh. [Disyorkan: Tutorial Git]

git checkout main &&
git pull

Urus perubahan tanpa komitmen

Jika anda ingin menyimpan pengubahsuaian setempat anda untuk kegunaan kemudian, Anda boleh gunakan git stash.

echo "Changes" >> hello.txt &&
git stash

Kini anda boleh menggunakan arahan berikut untuk menyemak, menggunakan atau membuang perubahan ini.

git stash list
# stash@{0}: WIP on main: 92354c8 Update changes.txt
git stash pop # 应用更改
git stash drop # 撤销修改

你可以使用 stash 编号,即git stash pop 0来应用一个特定的储藏库,或者git stash drop 0来撤销。

如果你想放弃所有的本地修改,只需恢复版本库到最后提交的修改,请运行。

git restore .

管理提交的更改

一旦你创建了一个提交,这个变化就会保存在本地的git历史中。如前所述,所有影响远程历史的修改都需要git push --force。以下所有命令都要记住这一点。

我们从编辑最后的提交信息开始。

git commit --amend # type :wq to save and close
# Press "i" to edit, "Esc" to stop editing

我们把一切重设到最开始怎么样?

要找到第一次提交的ID,请运行这个命令并滚动(向下箭头)到最后。

git log --abbrev-commit
# commit a07ee27
# Author: Your Name <your@email.address>
Date:   Sun Jul 11 11:47:16 2021 +0200
    Adds hello.txt
(END)
# type ":q" to close

现在运行这个来重置版本库,但保持所有的修改不被缓存。

git reset --soft COMMIT # e.g. a07ee27

与之相反,你也可以进行硬重置,用git reset --hard COMMIT来删除所有修改。还有几种其他的重置方式,你可以从git文档中了解到。

别名

大多数时候,你只需要使用少数几个命令(主要是checkout、add、commit、pull、push和merge),但有些命令可能是你想要“以防万一”的。

存储这些信息的一种方法是git aliases。要配置一个别名,只需在配置中设置它。例如,我经常使用的一个别名是git tree,它以树的形式打印出一个漂亮的历史日志。

git config --global alias.tree &#39;log --graph --decorate --pretty=oneline --abbrev-commit&#39;
# Try it with `git tree`

另一个有用的别名是删除所有合并的分支。

git config --global alias.clbr &#39;!git branch --merged | grep -v \* | xargs git branch -D&#39;

你可以看到它的前缀是"!",这允许我们使用任何命令,而不仅仅是git命令。

~完,我是刷碗智,今天礼拜六写的,要准备去刷碗了,骨的白!

▎作者:Valeria 译者:前端小智 来源:dev 原文:https://dev.to/valeriavg/master-git-in-7-minutes-gai

Atas ialah kandungan terperinci Membawa anda langkah demi langkah melalui arahan git yang paling biasa digunakan dalam 10 minit. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:前端小智. Jika ada pelanggaran, sila hubungi admin@php.cn Padam