日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

[转] Git使用教程 -- 新手向

發(fā)布時間:2024/3/26 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [转] Git使用教程 -- 新手向 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

Git使用教程

Published on Feb 26, 2017?in?Tutorials?with?8 comments

教程?Git?Github

是的,這跟上一篇文章一樣同是新手向教程,主要記錄我常用的Git操作和一些使用技巧和注意事項,希望可以幫到你。

這篇教程需要讀者懂點(diǎn)Command Line,不懂的話可以看一下我另外一篇文章:here

基礎(chǔ)知識

什么是Git?
Git 是一個命令行工具的集合,它可以幫你跟蹤和記錄文件的更改(源代碼,圖片等一切你想跟蹤回訪的)。有了它你可以恢復(fù)舊版本的項目,甚至可以比較、分析、合并和修改等。這個過程我們稱為版本控制。除了Git之外,我們還有SVN,Mercurial,Perforce,CVS,Bitkeeper等,幫助我們實(shí)現(xiàn)版本控制

Git的特點(diǎn)?
Git是分布式的,我們不需要一個主服務(wù)器來托管我們的項目的各個版本,相反,它是工作在你本地磁盤上的文件夾,這個存儲著Git管理的項目的文件夾,我們稱為repository。同時,你也可以把你的項目的副本放到線上,如Github或Gitlab,滿足多人協(xié)作和項目代碼共享的需要

安裝Git

這里只列出macOS的安裝,主要通過?homebrew?來安裝

brew install git

如果你太新手的話,這里再推薦兩個客戶端軟件,GitHub Desktop?and?Sourcetree

配置Git

安裝完成后,我們需要添加一些配置信息。其他Git有很多配置項需要去填寫,這里我們就先去填寫最重要的兩項,user.name和?user.email

打開終端,輸入下面內(nèi)容

git config --global user.name "Chakhsu Lau" git config --global user.email chakhsu@email.com

這里的"Chakhsu Lau"和chakhsu@email.com需要換成你的

配置好這兩項,這樣每對Git操作一次都會帶上上面你輸入的信息,從而跟蹤每次操作是誰在做

更多了解可以查看:here

創(chuàng)建Repository

上面我們已經(jīng)提到了,Git管理和存儲文件是在你磁盤的文件夾上進(jìn)行的。在終端輸入下面內(nèi)容

cd ~/node mkdir git-demo cd git-demo git init

git init這句命令會告訴Git這個文件夾是特別的,同時也會在該文件夾下再創(chuàng)建一個.git文件夾用來存儲歷史信息和配置信息

初始化后會有下面的信息顯示

Initialized empty Git repository in /Users/chakhsu/node/git-demo/.git/

說明我們的Git Repository已經(jīng)創(chuàng)建完畢,不過里面是空的,我們需要創(chuàng)建一個文件hello.txt

touch hello.txt

查看Repo狀態(tài)

git status可以幫助我們查看當(dāng)前Repository的狀態(tài),包括哪些文件更新了,哪些是新添,哪些是被刪除了等等

git statusOn branch masterInitial commitUntracked files:(use "git add <file>..." to include in what will be committed)hello.txtnothing added to commit but untracked files present (use "git add" to track)

這里返回的信息,就是上面我們添加的文件。這段信息告訴我們該文件是新的,但git還不知道是否需要去跟蹤它還是要選擇忽略它,所以我們進(jìn)入 Git Staging 的學(xué)習(xí)

操作Stage狀態(tài)

Git有一個“staging area”的概念。你可以把它想象為你的學(xué)生時期的書包,里面有各種作業(yè)本和書本(既是你的文件),這些作業(yè)本有些完成了作業(yè),有些完成了一部分,有些還未做,甚至有些還是新的。你可以通過git add選擇哪些作業(yè)本是需要提交的,這些被選擇的作業(yè)本就進(jìn)入了Stage狀態(tài),等待最后被git commit

如果選擇其中一個文件,則如下

git add hello.txt

如果選擇全部,則如下

git add -A

如果只選擇修改過的文件,不包括新增的文件和還未commit過的文件,則如下

git add .

我們這里執(zhí)行第一個選擇,然后查看Git狀態(tài),如下

git status On branch masterInitial commitChanges to be committed:(use "git rm --cached <file>..." to unstage)new file: hello.txt

發(fā)現(xiàn)Git已經(jīng)知道了我們的hello.txt已經(jīng)做好被提交上去的準(zhǔn)備了

如果我們要取消hello.txt這個文件的Stage狀態(tài)(取消add),則如下

git reset hello.txt

操作Commit狀態(tài)

將Staging的項目commit一下,就是將當(dāng)前項目所在的Repository給定一個時間點(diǎn)狀態(tài),同時還要加一段描述去簡述這次的commit的內(nèi)容,就像平時說的快照,我們可以隨時回去看看它怎么樣

git commit -m "Initial commit."[master (root-commit) b1adc8d] Initial commit.1 file changed, 0 insertions(+), 0 deletions(-)create mode 100644 hello.txt

這句話的意思,跳過編輯器直接輸入 commit 簡述,完成提交,并顯示一些信息

我們還可以這樣,如下

git commit -am "Initial commit."

這句話的意思是,先執(zhí)行g(shù)it add .再跳過編輯器直接輸入 commit 簡述,完成提交

如果我們要修改上一次 commit 的簡述,如下

git commit --amend

然后跳出編輯器,讓你修改當(dāng)前的簡述

如果我們要取消剛剛的 commit ,但要保留修改過的文件或者項目,如下

git reset HEAD^ --soft

如果我們要回到上一次commit干凈的狀態(tài),如下

git reset HEAD^ --hard

遠(yuǎn)程Repo

上面的基礎(chǔ)知識是在本地上操作,所有的commit都是僅存在項目里的.git文件夾內(nèi)。雖然本地的Repository是夠用的,但大多數(shù)的情況下,我們需要共享或者部署我們的項目到線上,或者是托管到遠(yuǎn)程Repositories

連接遠(yuǎn)程Repo

這個時候,需要我們到Github上注冊賬號,然后在上面創(chuàng)建空的Repository,假設(shè)我們已經(jīng)都注冊好和創(chuàng)建好Repository

這個Repository的地址是https://github.com/chakhsu/lilicia.git,這里的地址需要換成你自己的,這里只是作為教程使用

然后,打開終端輸入 如下

git remote add origin https://github.com/chakhsu/lilicia.git

一個項目可能有多個遠(yuǎn)程Repositories,為了區(qū)分不同的遠(yuǎn)程Repositories,我們就要給他們起不同的名字,這里的origin,就是這支Repositories的名字

上傳到服務(wù)器

剛剛我們已經(jīng)連上了遠(yuǎn)程Repositories,但上面還沒有任何東西,需要我們把commit好的文件上傳到遠(yuǎn)程Repositories

git push origin masterCounting objects: 3, done. Writing objects: 100% (3/3), 211 bytes | 0 bytes/s, done. Total 3 (delta 0), reused 0 (delta 0) To https://github.com/chakhsu/lilicia.git* [new branch] master -> master

這里的git push還會要求你輸入你的github的用戶名和密碼才能運(yùn)行push

還有g(shù)it push是帶有兩個參數(shù),一個是遠(yuǎn)程Repo的名稱(我們這里稱為origin)和分支push(master是每個Repo的默認(rèn)分支)

克隆Repo

上面我已經(jīng)把本地的Repo上傳到Github上了,別人就能在Github上查看和瀏覽Repo上的東西,甚至能克隆到他們自己的本地上,如下

git clone https://github.com/chakhsu/lilicia.git

Repo就會在本地上自動創(chuàng)建,且本地上Repo版本為Github上的版本

獲取更新

你更新了Repo,別人可以通過git pull更新線上的Repo到自己的本地Repo

git pull origin masterFrom https://github.com/chakhsu/lilicia* branch master -> FETCH_HEAD Already up-to-date.

這里的pull指下載遠(yuǎn)程的Repo并且合并本地的Repo

同樣地你可以這樣獲取別人的Repo

Branches管理

當(dāng)我們需要開發(fā)一個新的功能,最好的實(shí)踐是復(fù)制原始項目,在其副本上完成開發(fā),這個副本我們稱為分支(Branches)。這條分支有自己的版本控制,每次的修改都會跟其他項目有所區(qū)分,直到你決定合并它們。

分支管理的好處:

  • 對于已經(jīng)穩(wěn)定工作的版本的代碼將不會有任何影響

  • 多人協(xié)作共同開發(fā)

  • 開發(fā)者可以在自己的分支上完成開發(fā),不會受他人的影響

  • 當(dāng)不確定那個功能更好時,可以開出更多的分支,進(jìn)行對比

創(chuàng)建分支

每一個Repo的默認(rèn)分支都叫master,創(chuàng)建其他分支,使用git branch <name>,如下

git branch baranch-one

或者git checkout -b <name>

git checkout -b baranch-one

意思是創(chuàng)建該分支并且切換到該分支

至此,我們的baranch-one就創(chuàng)建完成,跟master分支上的版本一致

查看分支

列出所有本地branch

git branch

列出所有遠(yuǎn)程branch

git branch -r

列出所有本地以及遠(yuǎn)程branch

git branch -a

切換分支到baranch-one

git checkout baranch-one

合并分支

上面我們已經(jīng)創(chuàng)建好分支baranch-one,需要我們選擇該分支,然后進(jìn)入,如下

git branch baranch-one * master git checkout baranch-one

然后我們給該分支創(chuàng)建feature.txt,然后add和commit它

touch feature.txt git add feature.txt git commit -m "New feature complete."

接著,我們需要切換master分支上

git checkout master

下面這步就是合并分支

git merge baranch-one

合并之后,原來的baranch-one已經(jīng)不需要了,可以刪除了,如下

git branch -d baranch-one

進(jìn)階教程

這部分可能會在我們的日常開發(fā)過程中用到,知道并且會用就可以了

檢查commits

我們每一次的commit都有隨機(jī)生成一個唯一id,它由一串?dāng)?shù)字和字母組成,如果要查看所有commit以及它的id,我們可以用git log,如下

git logcommit 108e80c5d06dc802c2000d7085dcd2bd4162e666 Author: Your Name <youname@mail.com> Date: Sun Feb 26 00:56:14 2017 +0800Initial commit.

如果要查看具體的某次commit,我們可以用git show [commit],如下

git show 108e80c5commit 108e80c5d06dc802c2000d7085dcd2bd4162e666 Author: Your Name <youname@mail.com> Date: Sun Feb 26 00:56:14 2017 +0800Initial commit.diff --git a/hello.txt b/hello.txt new file mode 100644 index 0000000..e69de29

如果要查看兩次commit之間的不同,我們可以用 git diff?[commit-from]..[commit-to],這里就不演示了

恢復(fù)文件

上面其實(shí)已經(jīng)提到了,這里再補(bǔ)充說明

git checkout hello.txt git checkout 108e80c5 hello.txt

這兩個命令,前者是將hello.txt恢復(fù)到最近一次的commit狀態(tài),而后者則是指定恢復(fù)到某個commit的狀態(tài)

處理合并沖突

很多時候,我們經(jīng)常要進(jìn)行多人協(xié)作,共同開發(fā),我們不停地操作著創(chuàng)建分支合并分支。在這個過程中,就有可能會出現(xiàn)合并沖突。

讓我們來看一下例子。首先我們創(chuàng)建了兩個分支,分別叫branch-chakhsu和branch-ping,都要在同一個文件中寫一個函數(shù)來顯示數(shù)組的所有元素

假設(shè)這個同一個文件為showarray.js

branch-chakhsu分支的寫法,如下

// Use a for loop to console.log contents. for(var i=0; i<arr.length; i++) {console.log(arr[i]); }

branch-ping分支的寫法,如下

// Use forEach to console.log contents. arr.forEach(function(item) {console.log(item); });

然后我們都對上面兩個分支合并,然后就會報錯

git checkout master git merge branch-chakhsu git merge branch-pingAuto-merging showarray.js CONFLICT (content): Merge conflict in showarray.js Automatic merge failed; fix conflicts and then commit the result.

然后我們打開showarray.js,發(fā)現(xiàn)

<<<<<<< HEAD // Use a for loop to console.log contents. for(var i=0; i<arr.length; i++) {console.log(arr[i]); } ======= // Use forEach to console.log contents. arr.forEach(function(item) {console.log(item); }); >>>>>>> Ping's commit.

<<<<<<< HEAD和=======之間是當(dāng)前我們所在的分支的commit內(nèi)容

=======和>>>>>>> Ping's commit.是我們要合并的branch-ping分支的內(nèi)容

這個時候我們要做決定選擇是兩個都要留下,還是選擇其中一個或者改成自己想要的內(nèi)容,這里改成我們想要的內(nèi)容

刪除<<<<<<< HEAD和>>>>>>> Ping's commit.之間的內(nèi)容,修改為

// Not using for loop or forEach. // Use Array.toString() to console.log contents. console.log(arr.toString());

將修正的文件加入到stage狀態(tài),然后重新commit一次,如下

git add showarray.js git commit -m "Array printing conflict resolved."

合并沖突就此解決了。當(dāng)我們發(fā)生沖突的時候,處理步驟如下

  • 將發(fā)生沖突的文件打開編輯,處理內(nèi)容

  • 使用git add將處理好的文件加入stage

  • 重復(fù)上面兩個步驟,直到所有沖突處理完畢

  • git commit提交,完成

配置 .gitignore

很多時候,我們并不需要所有文件都需要git add,尤其當(dāng)我們使用git add -A的時候,這個命令是選擇所有文件進(jìn)入stage狀態(tài)。有什么辦法可以避免?那就是配置.gitignore文件

下面這些文件或者文件夾是可以被忽略

  • 日志文件(log)

  • 程序運(yùn)行任務(wù)創(chuàng)建的文件夾

  • Node.js中的node_modules文件夾

  • IDE創(chuàng)建的文件

  • 和一些開發(fā)者自己的個人文件

根據(jù)上面的清單,我們可以修改.gitignore文件的內(nèi)容為

*.log build/ node_modules/ .idea/ my_notes.txt

總結(jié)

寫了好久,自己也看了挺多資料,也算是一次大復(fù)習(xí),另外,文章可能有錯誤,歡迎指正

這里再列出編寫這篇教程發(fā)現(xiàn)到資料,希望能幫到你

  • Git官方文檔:here

  • Git的客戶端:here

  • GitHub Git 備忘單:here

  • GitHub 練習(xí)小游戲:here

  • .gitignore在線生成器:here

教程編寫結(jié)合了實(shí)踐和參考了下面文章

tutorialzine.com/2016/06/learn-git-in-30-minutes/
blog.gogojimmy.net/2012/01/21/how-to-use-git-2-basic-usage-and-worflow/

?

轉(zhuǎn)自:Git使用教程

? ? ? ? ? ?本文由?Chakhsu Lau?創(chuàng)作,采用?知識共享署名4.0?國際許可協(xié)議進(jìn)行許可

總結(jié)

以上是生活随笔為你收集整理的[转] Git使用教程 -- 新手向的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。