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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Git入门教程详解

發(fā)布時間:2024/1/23 编程问答 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Git入门教程详解 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

目錄

    • Git 簡介
    • Git for Windows安裝
    • Git 倉庫分區(qū)
    • 初始配置
    • 常用指令
      • 新建代碼庫git init
      • 克隆現(xiàn)有的倉庫git clone
      • 查看代碼倉庫狀態(tài)git status
      • 跟蹤新文件/暫存已修改的文件git add
      • 從暫存區(qū)移除文件git rm
      • 移動文件git mv
      • 查看已暫存和未暫存的修改git diff
      • 查看提交歷史git log
      • 查看命令歷史git relog
      • 提交更新git commit
      • 打標簽 git tag
      • 查看遠程倉庫git remote
      • 添加遠程倉庫
      • 從遠程倉庫拉取git fetch
      • 推送到遠程倉庫git push
    • 關聯(lián)遠程倉庫

Git 簡介

Git(讀音為/g?t/) 是一個開源的分布式版本控制系統(tǒng),可以有效、高速地處理從很小到非常大的項目版本管理。 Git 是 Linus Torvalds 為了幫助管理 Linux 內(nèi)核開發(fā)而開發(fā)的一個開放源碼的版本控制軟件。

git和CVS、SVN的區(qū)別

git是分布式版本控制系統(tǒng),代碼提交是在本地的(如此速度就快),當然生成補丁(patch)然后push到遠程服務器上是需要聯(lián)網(wǎng)的。

CVS、SVN是集中式版本控制系統(tǒng),代碼提交都是提交到遠程服務器上,是需要一直聯(lián)網(wǎng)的(如此速度就慢)(這里的一直聯(lián)網(wǎng)不是說你寫代碼的時候要聯(lián)網(wǎng),而是說你提交代碼的時候必須聯(lián)網(wǎng);但是git不同,git提交代碼是本地的不需要聯(lián)網(wǎng),生成patch后push patch才需要聯(lián)網(wǎng),相當于svn的遠程的集中服務器對于git來說,這個集中的遠程服務器就在本地)。這個地方比較難理解。

CVS、SVN這樣的集中式版本控制系統(tǒng),它的完整代碼倉庫(代碼倉庫不僅僅只包含了代碼,還包含各個歷史版本的信息等)在中心服務器上,一旦這個中心服務器掛了,也就是完整的代碼倉庫掛了,雖然你本地可能之前有從中心服務器上取得過代碼,但是那些歷史版本信息都沒有了,而且你也無法再提交代碼。

git不同,git沒有中心服務器的概念,每一個git客戶端(git節(jié)點)都含有一個完整的代碼倉庫(前提是你之前從遠程git倉庫fetch過代碼),所以那些歷史版本信息都在你本機上,假如哪一個git節(jié)點掛掉了,隨意從其他git節(jié)點clone一個代碼倉庫過來就ok了, 那些原來的代碼、版本信息之類的都還是完整的(當然如果你在這個掛掉的git節(jié)點上新增的代碼是沒有掉了的)。

綜上,git的每一個節(jié)點(第一次從遠程git倉庫取得代碼后,該git節(jié)點就是一個完整的代碼倉庫)相當于SVN的中心服務器,都包含完整的代碼倉庫。

git的優(yōu)點
1、適合分布式開發(fā),強調(diào)個體。
2、遠程服務器(公共的)壓力和數(shù)據(jù)量都不會太大。
3、速度快、靈活。
4、任意兩個開發(fā)者之間可以很容易的解決沖突。
5、離線工作,近乎所有操作都是本地執(zhí)行。(當然提交遠程服務器或者從遠程服務器fetch代碼是要聯(lián)網(wǎng)的)。

Git for Windows安裝

Git for Windows下載網(wǎng)址:https://git-scm.com/downloads
安裝過程參考:Git for Windows安裝

Git 倉庫分區(qū)


部分名詞解釋如下:
Workspace:工作區(qū)
Index / Stage:暫存區(qū)
Repository:倉庫區(qū)(或本地倉庫)
Remote:遠程倉庫

初始配置

指的是首次使用git先需要配置什么。

git config --global user.name "Your Name" git config --global user.email "email@example.com"

因為git是分布式版本控制系統(tǒng),所以,每個機器都必須自報家門:你的名字和Email地址。注意git config命令的–global參數(shù),用了這個參數(shù),表示你這臺機器上所有的git倉庫都會使用這個配置,當然也可以對某個倉庫指定不同的用戶名和Email地址。然后在本機會生成一個.gitconfig文件,里面包含了user.name和user.email的信息。

如果不加–global參數(shù)就只對當前項目有效。但通常都使用–global,避免每次都要重新配置。

特殊場景:只更改當前項目的用戶信息
如果要在某個特定的項目中使用其他名字或者電郵,只要去掉 --global 選項重新配置即可,新的設定保存在當前項目的.git/config 文件里。

git config user.name "Your Name" git config user.email "email@example.com" # 顯示當前的Git配置 $ git config --list

使用此命令可查看當前的git配置,確保配置成功。

WINDOWS下需要再添加一個配置,如下:

git config --global core.autocrlf false

如果沒有加這個配置,在后續(xù)git add的時候可能會報warning,如下:

這是因為在windows中的換行符為CRLF(\r\n), 而在linux下的換行符為:LF(\n)。
使用git來生成一個工程后,文件中的換行符為LF,在windows中,執(zhí)行git add file操作時,系統(tǒng)提示:LF將被轉(zhuǎn)換成CRLF。
CRLF – Carriage-Return Line-Feed 回車換行,就是回車(CR,ASCII 13,\r) 換行(LF,ASCII 10,\n)。

常用指令

新建代碼庫git init

# 在當前目錄新建一個Git代碼庫 $ git init# 新建一個目錄,將其初始化為Git代碼庫 $ git init [project-name]

進入項目目錄(注意這個前提)并輸入:$ git init
該命令將創(chuàng)建一個名為 .git 的子目錄,這個子目錄含有你初始化的 Git 倉庫中所有的必須文件,這些文件是
Git 倉庫的骨干。但是,在這個時候,我們僅僅是做了一個初始化的操作,你的項目里的文件還沒有被跟蹤。

克隆現(xiàn)有的倉庫git clone

git clone [url]

比如,要克隆 Git 的可鏈接庫 libgit2
$ git clone https://github.com/libgit2/libgit2
這會在當前目錄下創(chuàng)建一個名為 “l(fā)ibgit2” 的目錄,并在這個目錄下初始化一個 .git 文件夾,從遠程倉庫拉
取下所有數(shù)據(jù)放入 .git 文件夾,然后從中讀取最新版本的文件的拷貝。

自定義本地倉庫的名字,你可以使用如下命令:
$ git clone https://github.com/libgit2/libgit2 mylibgit
這將執(zhí)行與上一個命令相同的操作,不過在本地創(chuàng)建的倉庫名字變?yōu)?mylibgit

初次克隆某個倉庫的時候,工作目錄中的所有文件都屬于已跟蹤文件,并處于未修改狀態(tài)。

查看代碼倉庫狀態(tài)git status

$ git status

git status -s 命令或 git status --short 命令,你將得到一種更為緊湊的格式輸出。
新添加的未跟蹤文件前面有 ?? 標記,新添加到暫存區(qū)中的文件前面有 A 標記,修改過的文件前面有 M 標記。
M 有兩個可以出現(xiàn)的位置,出現(xiàn)在右邊的 M 表示該文件被修改了但是還沒放入暫存區(qū),出現(xiàn)在靠左
邊的 M 表示該文件被修改了并放入了暫存區(qū)。
如果文件前面出現(xiàn)兩個MM,說明在上一次git add該文件之后,又修改了該文件( 在工作區(qū)被修改并提交到暫存區(qū)后又在工作區(qū)中被修改了 )

跟蹤新文件/暫存已修改的文件git add

# 添加指定文件到暫存區(qū) $ git add [file1] [file2] ...# 添加指定目錄到暫存區(qū),包括子目錄 $ git add [dir]# 添加當前目錄的所有文件到暫存區(qū),本質(zhì)也是上一條 $ git add .# 添加每個變化前,都會要求確認 # 對于同一個文件的多處變化,可以實現(xiàn)分次提交 $ git add -p

注意,實際上 Git 只不過暫存了你運行 git add 命令時的版本,如果你現(xiàn)在提交,該文件的版本是你最后一次運行
git add 命令時的那個版本,而不是你運行 git commit 時,在工作目錄中的當前版本。所以,運行了 git
add 之后又作了修訂的文件,需要重新運行 git add 把最新版本重新暫存起來

從暫存區(qū)移除文件git rm

# 刪除工作區(qū)文件,并且將這次刪除放入暫存區(qū) $ git rm [file1] [file2] ...# 停止追蹤指定文件,但該文件會保留在工作區(qū) $ git rm --cached [file]

要從 Git 中移除某個文件,就必須要從已跟蹤文件清單中移除(確切地說,是從暫存區(qū)域移除),然后提交。可
以用 git rm 命令完成此項工作,并連帶從工作目錄中刪除指定的文件
如果只是簡單地從工作目錄中手工刪除文件,運行 git status 時就會在 “Changes not staged for
commit” 部分(也就是 未暫存清單)看到。如果真是手工刪除了,可以再 git rm該文件即可

如果刪除之前修改過并且已經(jīng)放到暫存區(qū)域的話,則必須要用強
制刪除選項 -f(譯注:即 force 的首字母)。這是一種安全特性,用于防止誤刪還沒有添加到快照的數(shù)據(jù),這
樣的數(shù)據(jù)不能被 Git 恢復。

我們想把文件從 Git 倉庫中刪除(亦即從暫存區(qū)域移除),但仍然希望保留在當前工作目錄
中。換句話說,你想讓文件保留在磁盤,但是并不想讓 Git 繼續(xù)跟蹤。為達到這一目
的,使用 --cached 選項:$ git rm --cached README 將README移除暫存區(qū)但保留在工作目錄

git rm 命令后面可以列出文件或者目錄的名字,也可以使用 glob 模式。比方說:
$ git rm log/*.log
注意到星號 * 之前的反斜杠 \,因為 Git 有它自己的文件模式擴展匹配方式,所以我們不用 shell 來幫忙展開。
此命令刪除 log/ 目錄下擴展名為 .log 的所有文件。類似的比如:
$ git rm *~
該命令為刪除以 ~ 結(jié)尾的所有文件。

移動文件git mv

# 改名文件,并且將這個改名放入暫存區(qū) $ git mv [file-original] [file-renamed]

git mv 就相當于運行了下面三條命令:$ git mv README.md README
$ mv README.md README
$ git rm README.md
$ git add README

查看已暫存和未暫存的修改git diff

# 顯示暫存區(qū)和工作區(qū)的差異 $ git diff# 顯示暫存區(qū)和上一個commit的差異,文件是可選的參數(shù),不帶[文件]參數(shù)的是比較所有的不同修改,帶[文件]參數(shù)的,你可以只查看某個文件的不同 $ git diff --cached [file]# 顯示工作區(qū)與當前分支最新commit之間的差異 $ git diff HEAD# 顯示兩次提交之間的差異 $ git diff [first-branch]...[second-branch]# 顯示今天你寫了多少行代碼 $ git diff --shortstat "@{0 day ago}"

查看提交歷史git log

# 顯示當前分支的版本歷史 $ git log# 顯示commit歷史,以及每次commit發(fā)生變更的文件 $ git log --stat# 搜索提交歷史,根據(jù)關鍵詞 $ git log -S [keyword]# 顯示某個commit之后的所有變動,每個commit占據(jù)一行 $ git log [tag] HEAD --pretty=format:%s# 顯示某個commit之后的所有變動,其"提交說明"必須符合搜索條件 $ git log [tag] HEAD --grep feature# 顯示某個文件的版本歷史,包括文件改名 $ git log --follow [file] $ git whatchanged [file]# 顯示指定文件相關的每一次diff $ git log -p [file]# 顯示過去5次提交 $ git log -5 --pretty --oneline# 顯示所有提交過的用戶,按提交次數(shù)排序 $ git shortlog -sn

默認不用任何參數(shù)的話,git log 會按提交時間列出所有的更新,最近的更新排在最上面。

一個常用的選項是 -p,用來顯示每次提交的內(nèi)容差異。你也可以加上 -2 來僅顯示最近兩次提交:
$ git log -p -2
該選項除了顯示基本信息之外,還在附帶了每次 commit 的變化。當進行代碼審查,或者快速瀏覽某個搭檔提交
的 commit 所帶來的變化的時候,這個參數(shù)就非常有用了。

如果你想看到每次提交的簡略的統(tǒng)計信息,你可以使用 --stat 選項:
$ git log --stat
–stat 選項在每次提交的下面列出額所有被修改過的文件、有多少文件被修改了以及被修改
過的文件的哪些行被移除或是添加了。在每次提交的最后還有一個總結(jié)。

查看命令歷史git relog

$ git relog

提交更新git commit

# 提交暫存區(qū)到倉庫區(qū) $ git commit -m [message]# 提交暫存區(qū)的指定文件到倉庫區(qū) $ git commit [file1] [file2] ... -m [message]# 提交工作區(qū)自上次commit之后的變化,直接到倉庫區(qū) $ git commit -a# 提交時顯示所有diff信息 $ git commit -v# 使用一次新的commit,替代上一次提交 # 如果代碼沒有任何新變化,則用來改寫上一次commit的提交信息 $ git commit --amend -m [message]# 重做上一次commit,并包括指定文件的新變化 $ git commit --amend [file1] [file2] ...

打標簽 git tag

# 列出所有tag $ git tag# 新建一個tag在當前commit $ git tag [tag]# 新建一個tag在指定commit $ git tag [tag] [commit]# 刪除本地tag $ git tag -d [tag]# 刪除遠程tag $ git push origin :refs/tags/[tagName]# 查看tag信息 $ git show [tag]# 提交指定tag $ git push [remote] [tag]# 提交所有tag $ git push [remote] --tags# 新建一個分支,指向某個tag $ git checkout -b [branch] [tag]

查看遠程倉庫git remote

# 顯示所有遠程倉庫 $ git remote -v# 顯示某個遠程倉庫的信息 $ git remote show [remote]

如果你已經(jīng)克隆了自己的倉庫,那么至少應該能看到 origin - 這是 Git 給你克隆的倉庫服務器的默認名
字,如果你使用 clone 命令克隆了一個倉庫,命令會自動將其添加為遠程倉庫并默認以 “origin” 為簡寫。
你也可以指定選項 -v,會顯示需要讀寫遠程倉庫使用的 Git 保存的簡寫與其對應的 URL

添加遠程倉庫

# 增加一個新的遠程倉庫,并命名 $ git remote add [shortname] [url]

從遠程倉庫拉取git fetch

$ git fetch [remote]# 取回遠程倉庫的變化,并與本地分支合并 $ git pull [remote] [branch]

git pull 命令基本上就是 git fetch 和 git merge 命令的組合體,Git 從你指定的遠程倉庫中抓取內(nèi)容,
然后馬上嘗試將其合并進你所在的分支中。

推送到遠程倉庫git push

# 上傳本地指定分支到遠程倉庫 $ git push [remote] [branch]# 強行推送當前分支到遠程倉庫,即使有沖突 $ git push [remote] --force# 推送所有分支到遠程倉庫 $ git push [remote] --all

注意;只有當你有所克隆服務器的寫入權限,并且之前沒有人推送過時,這條命令才能生效。
當你和其他人在同一時間克隆,他們先推送到上游然后你再推送到上游,你的推送就會毫無疑問地被拒絕。你必須先將他們的工作拉取下
來并將其合并進你的工作后才能推送。
git push 命令用來與另一個倉庫通信,計算你本地數(shù)據(jù)庫與遠程倉庫的差異,然后將差異推送到另一個倉庫
中。它需要有另一個倉庫的寫權限,因此這通常是需要驗證的。

關聯(lián)遠程倉庫

如何關聯(lián)github
參考:最新GitHub新手使用教程

好文推薦:
git 入門:概念、原理、使用

Git常用命令

小豬的Git使用總結(jié)

總結(jié)

以上是生活随笔為你收集整理的Git入门教程详解的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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