目錄
前言" >前言
正文" >正文
1.Git簡介" >1.Git簡介
1.1 Git 術語" >1.1 Git 術語
1.2 忽略特定的檔案" >1.2 忽略特定的檔案
1.3 使用.gitkeep来追踪空的文件夹" >1.3 使用.gitkeep来追踪空的文件夹
1.4 配置" >1.4 配置
2.Git安装" >2.Git安装
3.创建仓库" >3.创建仓库
4.提交文件" >4.提交文件
4.1首次推送" >4.1首次推送
5.分支" >5.分支
但如果是多人协作的话,git的魅力就开始提现出来了,每个人有自己的一个分支,各自在自己的分支上工作互不干扰。具体的看这:Git教程-创建合并分支
6.标签" >6.标签
标签的作用主要是用来做版本回退的,关于版本回退,这也是Git的亮点之一,起到了后悔药的功能·
7.后悔药" >7.后悔药
8. 文件信息
9.其它命令" >9.其它命令
后记
首頁 後端開發 php教程 詳細講解Git基礎

詳細講解Git基礎

Mar 14, 2018 pm 03:28 PM
基礎 講解 詳細

 這篇文章講述了git基礎,大家對Git基礎不了解的話或對Git基礎感興趣的話那麼我們就一起來看看這篇文章吧, 好了廢話少說進入正題吧

前言

本文詳細解說了Git常用指令的技巧和使用方法。

正文

1.Git簡介

#Git的誕生確實是一個有趣的故事,我們知道,當年Linus創建了開源的Linux,從此,Linux系統不斷發展,現在已經成為最大的伺服器系統軟體了。 (請不要傻傻分不清Linus和Linux)

但是隨著Linux的不斷壯大,就需要各種版本控制了,起初Linus帶著他的小弟們使用的是BitKeeper(商業版本控制系統),之後呢由於某種原因BitKeeper的公司不讓他們使用了,於是Linus自己花了兩週時間寫出了Git並且開源了(BitKeeper已哭暈在廁所),阿彌陀佛,幸虧BitKeeper不讓Linus他們用了,要不然我們現在也不會有這麼好用的Git了,博主更不會在這寫這篇博文了。

之後的歲月裡,漸漸有了github,coding等一些可以使用git存儲的網站,Git的江湖地位變得無可替代了,如果你是個開發者卻還不會使用Git那就太out了。

這裡先引用一張圖解釋Git
工作原理:

#1、Workspace:工作區,執行git add *指令就把改變提交到了暫存區,執行git pull命令將遠端倉庫的資料拉到目前分支並合併,執行git checkout [branch-name]切換分支

2、Index:暫存區,執行git commit - m '說明' 指令就把改動提交到了倉庫區(目前分支)

3、Repository:倉庫區(或本地倉庫),執行git push origin master提交到遠端倉庫,執行git clone 位址將克隆遠端倉庫到本地

4、Remote:遠端倉庫,就是類似github,coding等網站所提供的倉庫

註:實際操作指令和上述指令會有所不同,這裡這是解釋清楚命令和倉庫的關係。

1.1 Git 術語

術語 定義 倉庫(Repository) 一個倉庫包含了所有的版本資訊、所有的分支和標記資訊。在Git中倉庫的每份拷貝都是完整的。倉庫讓你可以從中取得你的工作副本。 分支(Branches) 一個分支意味著一個獨立的、擁有自己歷史資訊的代碼線(code line)。你可以從已有的程式碼產生一個新的分支,這個分支與剩餘的分支完全獨立。預設的分支往往是叫master。使用者可以選擇一個分支,選擇一個分支執行指令git checkout branch. 標記(Tags) 一個標記指的是某個分支某個特定時間點的狀態。透過標記,可以很方便的切換到標記時的狀態,例如2009年1月25號在testing分支上的代碼狀態 提交(Commit) 提交代碼後,倉庫會建立一個新的版本。這個版本可以在後續被重新獲得。每次提交都包括作者和提交者,作者和提交者可以是不同的人 修訂(Revision) 用來表示程式碼的一個版本狀態。 Git透過以SHA1 hash演算法表示的id來識別不同的版本。每一個 SHA1 id都是160位元長,16進位識別的字串.。最新的版本可以透過HEAD來取得。之前的版本可以透過”HEAD~1”來獲取,以此類推。

1.2 忽略特定的檔案

可以設定Git忽略特定的檔案或是資料夾。這些配置都放在.gitignore檔案中。這個檔案可以存在於不同的資料夾中,可以包含不同的檔案匹配模式。
例如.gitignore內容可以如下:

忽略某文件
npm-debug.log
忽略文件夹
dist/
node_modules/
.idea/
登入後複製

同時Git也提供了全域的配置,core.excludesfile。

忽略之后的文件或是文件夹Git就不去提交里面的内容了。

1.3 使用.gitkeep来追踪空的文件夹

Git会忽略空的文件夹。如果你想版本控制包括空文件夹,根据惯例会在空文件夹下放置.gitkeep文件。其实对文件名没有特定的要求。一旦一个空文件夹下有文件后,这个文件夹就会在版本控制范围内。

1.4 配置

# 显示当前的Git配置
$ git config --list
# 编辑Git配置文件,只是配置用户信息的话直接看下面两行命令即可
$ git config -e [--global]
# 设置提交代码时的用户信息,是否加上全局--global自行决定,一般是直接设置全局的。另外用户邮箱需要注意最好使用gmail,QQ也可以,需要和你远程仓库保持一致不然你的contribution是不会被记录在远程仓库的
$ git config [--global] user.name "[name]"
$ git config [--global] user.email "[email address]"
登入後複製

Git的设置文件为.gitconfig,它可以在用户主目录下(全局配置),也可以在项目目录下(项目配置)。

个人觉得git是需要认真学的,虽然是个工具但不学习很容易把自己弄糊涂,希望这篇博客可以在某些时候帮到您,让您大概理解git的工作原理并把基本命令串起来。那么下面就说一下Git重要的基本命令吧。

2.Git安装

Git-for-window
登入後複製

下载安装这个不用多说吧….

3.创建仓库

# 在当前目录创建一个文件夹
$ mkdir [project-name]
# 在当前目录新建一个Git代码库
$ git init
# 新建一个目录,将其初始化为Git代码库
$ git init [project-name]
# 下载一个项目和它的整个代码历史(各个分支提交记录等)
$ git clone [url]
登入後複製

git init后会出现.git文件夹,里面有配置文件,如果没有git bash里面输入ls -lah就可以看到了

关于如何关联Git和远程仓库,比如Coding,github等,可以看这两篇文章:
Git链接到自己的GithubCoding帮助中心

4.提交文件

4.1首次推送

# 添加当前目录的所有文件到暂存区
$ git add *
# 提交暂存区到仓库区
$ git commit -m [message]
# 为远程Git更名为origin
$ git remote add origin git@github.com:abcd/tmp.git
# 推送此次修改,这是首次推送需要加上-u,之后推送就可以直接git push  origin master,origin是远程Git名字,这个可以自己定义,不过一般是用origin罢了,master是默认的分支,如果不在master分支提交需要写清楚分支名称
$ git push -u origin master
登入後複製

首次推送成功后可以看下下面的命令:

# 添加指定文件到暂存区
$ git add [file1] [file2] ...
# 添加指定目录到暂存区,包括子目录
$ git add [dir]
# 添加当前目录的所有文件到暂存区
$ git add *
# 添加每个变化前,都会要求确认
对于同一个文件的多处变化,可以实现分次提交
$ git add -p
# 删除工作区文件,并且将这次删除放入暂存区
$ git rm [file1] [file2] ...
# 停止追踪指定文件,但该文件会保留在工作区
$ git rm --cached [file]
# 改名文件,并且将这个改名放入暂存区
$ git mv [file-original] [file-renamed]
# 提交暂存区到仓库区
$ git commit -m [message]
# 提交暂存区的指定文件到仓库区
$ git commit [file1] [file2] ... -m [message]
# 提交工作区自上次commit之后的变化,直接到仓库区
$ git commit -a
# 提交时显示所有diff信息
$ git commit -v
# 使用一次新的commit,替代上一次提交
如果代码没有任何新变化,则用来改写上一次commit的提交信息
$ git commit --amend -m [message]
# 重做上一次commit,并包括指定文件的新变化
$ git commit --amend [file1] [file2] ...
# 提交更改到远程仓库
$ git push origin master
# 拉取远程更改到本地仓库默认自动合并
$ git pull origin master
登入後複製

如果我们只是维护自己的小项目的话,上面的命令已经够用了,自己一个人在master分支想咋折腾就咋折腾

5.分支

但如果是多人协作的话,git的魅力就开始提现出来了,每个人有自己的一个分支,各自在自己的分支上工作互不干扰。具体的看这:Git教程-创建合并分支

# 列出所有本地分支
$ git branch
# 列出所有远程分支
$ git branch -r
# 列出所有本地分支和远程分支
$ git branch -a
# 新建一个分支,但依然停留在当前分支
$ git branch [branch-name]
# 新建一个分支,并切换到该分支
$ git checkout -b [branch]
# 新建一个分支,指向指定commit
$ git branch [branch] [commit]
# 新建一个分支,与指定的远程分支建立追踪关系
$ git branch --track [branch] [remote-branch]
# 切换到指定分支,并更新工作区
$ git checkout [branch-name]
# 切换到上一个分支
$ git checkout -
# 建立追踪关系,在现有分支与指定的远程分支之间
$ git branch --set-upstream [branch] [remote-branch]
# 合并指定分支到当前分支,如果有冲突需要手动合并冲突(就是手动编辑文件保存咯),然后add,commit再提交
$ git merge [branch]
# 选择一个commit,合并进当前分支
$ git cherry-pick [commit]
# 删除分支
$ git branch -d [branch-name]
# 删除远程分支
$ git push origin --delete [branch-name]
$ git branch -dr [remote/branch]
登入後複製

6.标签

标签的作用主要是用来做版本回退的,关于版本回退,这也是Git的亮点之一,起到了后悔药的功能·

# 列出所有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]
登入後複製

7.后悔药

想一下在你写完N个文件代码后,commit到了本地仓库,突然发现整个应用崩溃了!咋整?Git给了我们吃后悔药
的机会:

# 恢复暂存区的指定文件到工作区
$ git checkout [file]
# 恢复某个commit的指定文件到暂存区和工作区
$ git checkout [commit] [file]
# 恢复暂存区的所有文件到工作区
$ git checkout .
# 回退到上一个版本,在Git中,用HEAD表示当前版本
$ git reset --hard HEAD^
# 重置暂存区的指定文件,与上一次commit保持一致,但工作区不变
$ git reset [file]
# 重置暂存区与工作区,与上一次commit保持一致
$ git reset --hard
# 重置当前分支的指针为指定commit,同时重置暂存区,但工作区不变
$ git reset [commit]
# 重置当前分支的HEAD为指定commit,同时重置暂存区和工作区,与指定commit一致
$ git reset --hard [commit]
# 重置当前HEAD为指定commit,但保持暂存区和工作区不变
$ git reset --keep [commit]
# 新建一个commit,用来撤销指定commit
# 后者的所有变化都将被前者抵消,并且应用到当前分支
$ git revert [commit]
# 暂时将未提交的变化移除,稍后再移入
$ git stash
$ git stash pop
登入後複製

这个时候标签的作用就体现出来了,因为commit号太冗长了,记起来太麻烦有了标签我们相当于自定义了commit号

8. 文件信息

# 显示当前分支的版本历史
$ git log
# 显示commit历史,以及每次commit发生变更的文件
$ git log --stat
# 搜索提交历史,根据关键词
$ git log -S [keyword]
# 显示某个commit之后的所有变动,每个commit占据一行
$ 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
# 显示所有提交过的用户,按提交次数排序
$ git shortlog -sn
# 显示指定文件是什么人在什么时间修改过
$ git blame [file]
# 显示暂存区和工作区的差异
$ git diff
# 显示暂存区和上一个commit的差异
$ git diff --cached [file]
# 显示工作区与当前分支最新commit之间的差异
$ git diff HEAD
# 显示两次提交之间的差异
$ git diff [first-branch]...[second-branch]
# 显示今天你写了多少行代码
$ git diff --shortstat "@{0 day ago}"
# 显示某次提交的元数据和内容变化
$ git show [commit]
# 显示某次提交发生变化的文件
$ git show --name-only [commit]
# 显示某次提交时,某个文件的内容
$ git show [commit]:[filename]
登入後複製

9.其它命令

命令 说明 git blame filepath git blame清楚的记录某个文件的更改历史和更改人,简直是查看背锅人的利器,filepath是需要查看的文件路径 git status 显示有变更的文件 git reflog 显示当前分支的最近几次提交

后记

要想彻底熟练使用git那需要记住的命令多了去了,起码几百个吧,不过在日常使用中,本文涉及的命令应该是足够用了,有遗漏的常用命令欢迎提出补充。另外,诚心希望您能把参考文章好好读一下,阮老师和廖老师总结的十分到位。本文好多命令也都是使用的两位老师总结的。

相关推荐:

Git的常用片語

#

以上是詳細講解Git基礎的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

PHP基礎教學:從入門到精通 PHP基礎教學:從入門到精通 Jun 18, 2023 am 09:43 AM

PHP是一種廣泛使用的開源伺服器端腳本語言,它可以處理Web開發中所有的任務。 PHP在網頁開發的應用廣泛,尤其是在動態資料處理上表現優異,因此被許多開發者喜愛和使用。在本篇文章中,我們將一步步講解PHP基礎知識,幫助初學者從入門到精通。一、基本語法PHP是一種解釋性語言,其程式碼類似HTML、CSS和JavaScript。每個PHP語句都以分號;結束,註

Linux可以零基礎學習嗎?需要學什麼? Linux可以零基礎學習嗎?需要學什麼? Feb 19, 2024 pm 12:57 PM

  想要從事IT行業,但是有不想要學習程式設計該選擇哪門技術合適呢?當然是Linux運維了。 Linux是市場上非常受歡迎的技術,應用範圍廣泛,就業前景好,受到了很多人的喜歡。那麼問題來了,Linux運維零基礎可以學習嗎?  在伺服器市場上,Linux系統因為穩定安全、免費開源和高效便捷等優點在市場佔有率高達80%,由此可以看得出來Linux應用是非常廣泛的。無論是現在還是未來,學習Linux都是非常好的選擇。至於零基礎可以學嗎?我的答案是當然可以了。老男孩教育Linux面授班專門針對零基礎人員設

PHP基礎入門:如何使用echo函數輸出文字內容 PHP基礎入門:如何使用echo函數輸出文字內容 Jul 30, 2023 pm 05:38 PM

PHP基礎入門:如何使用echo函數輸出文字內容在PHP程式設計中,常常需要在網頁上輸出一些文字內容,這時就可以使用echo函數。本文將介紹如何使用echo函數輸出文字內容,並提供一些範例程式碼。在開始之前,首先要確保你已經安裝了PHP,並且配置了運行環境。如果還沒有安裝PHP,你可以在PHP官方網站(https://www.php.net)上下載最新的穩定版本。

學習Go語言變數的基礎知識 學習Go語言變數的基礎知識 Mar 22, 2024 pm 09:39 PM

Go語言是一種由Google開發的靜態類型、編譯型語言,其簡潔、高效的特性受到了廣泛的開發者關注和喜愛。在學習Go語言的過程中,熟練變數的基礎知識是至關重要的一步。本文將透過具體的程式碼範例來講解Go語言中變數的定義、賦值、類型推論等基礎知識,幫助讀者更能理解和掌握這些知識點。在Go語言中,定義一個變數可以使用關鍵字var,即var變數名變數類型的格

C語言函數詳解:基礎到進階,全面解析函數的使用 C語言函數詳解:基礎到進階,全面解析函數的使用 Feb 18, 2024 pm 02:25 PM

C語言函數大全:從基礎到進階,詳解函數的使用方法,需要具體程式碼範例簡介:C語言是一種廣泛使用的程式語言,其強大的功能和靈活性使它成為許多開發人員的首選。在C語言中,函數是一個重要的概念,它能夠將一段程式碼組合成一個獨立的模組,提高了程式碼的重用性和可維護性。本文將從基礎開始介紹C語言函數的使用方法,並逐步進階,幫助讀者掌握函數編寫的技巧。一、函數的定義與呼叫在C

Cookies的詳細使用說明 Cookies的詳細使用說明 Feb 22, 2024 pm 12:21 PM

cookies是一種常見的網路技術,用於儲存使用者在網站上的個人偏好和行為資訊。在今天的數位時代,幾乎所有的網站都使用cookies來提供個人化和更​​好的使用者體驗。本文將詳細介紹cookies的使用說明,幫助使用者更理解並掌握這項技術。首先,我們來了解一下cookies的基本概念。 Cookies是網站在使用者瀏覽器上儲存的小型文字文件,包含使用者造訪網站的一

詳細說明win7任務管理器快捷鍵是什麼 詳細說明win7任務管理器快捷鍵是什麼 Jul 12, 2023 pm 09:49 PM

任務管理器是大家平時應用電腦上時常見的一個程序流程,能夠見到電腦上全部常見運作的程序流程.有朋友想打開win7任務管理器,不清楚win7任務管理器快捷鍵是什麼.下邊就教下大夥兒迅速打開win7任務管理器的方式.1.按住鍵盤上的Ctrl+Alt+Delete鍵以後,再挑選運行任務管理器。 2.另一個快速鍵也可以開啟工作管理員,按住Esc+shift+Ctrl,就可以開啟工作管理員了。 3.按Win+R鍵開啟執行視窗在頁面中鍵入C:\Windows\system32\taskmgr.exe,按回車,也可

PHP學習筆記:物件導向程式設計基礎 PHP學習筆記:物件導向程式設計基礎 Oct 09, 2023 pm 12:46 PM

PHP學習筆記:物件導向程式設計基礎,需要具體程式碼範例導言:物件導向程式設計(Object-OrientedProgramming,簡稱OOP)是一種程式設計的思考方式,透過將問題分解為多個物件並定義物件之間的交互,來解決複雜的程式設計問題。 PHP作為一門功能強大的程式語言,也支援物件導向程式設計。本文將介紹PHP中物件導向程式設計的基礎概念和常用語法,同時提供具體的程式碼範例。類別

See all articles