自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

技能篇:Git的簡易教程

開發(fā) 前端
在學(xué)校,或許憑借一個人的力量就能負(fù)責(zé)整個項目的開發(fā)到上線。但是在在公司,因為項目的復(fù)雜性和緊急性,一個項目的往往是由多個人實現(xiàn),此時就有一個問題,代碼提交和代碼合并。

[[415295]]

本文轉(zhuǎn)載自微信公眾號「潛行前行」,作者cscw。轉(zhuǎn)載本文請聯(lián)系潛行前行公眾號。

在學(xué)校,或許憑借一個人的力量就能負(fù)責(zé)整個項目的開發(fā)到上線。但是在在公司,因為項目的復(fù)雜性和緊急性,一個項目的往往是由多個人實現(xiàn),此時就有一個問題,代碼提交和代碼合并。git和svn,這篇文章來講講git的原理和使用

  • version版本控制
  • git的賬號配置
  • 創(chuàng)建git倉庫
  • git的原理
  • 文件操作命令
  • 分支操作命令

version版本控制

  • 版本控制(Revision control)是一種在開發(fā)的過程中用于對文件、目錄或工程等內(nèi)容的修改歷史,方便查看更改歷史記錄,備份及以便恢復(fù)以前版本的技術(shù)
  • 沒有進(jìn)行版本控制或者版本控制本身缺乏正確的管理,在軟件開發(fā)過程中將會引入很多問題,如軟件代碼的一致性、軟件內(nèi)容的冗余、軟件開發(fā)過程中的并發(fā)性、軟件源代碼的安全性,以及軟件的整合等問題

git的賬號配置

  • 配置名字和郵件地址
  1. # git config --global user.name "hello lwl" 
  2. # git config --global user.email lwl@csc.com 
  3. // 查看系統(tǒng)config 
  4. # git config --system --list 
  5. // 查看當(dāng)前用戶(global)配置 
  6. # git config --global  --list 
  7. // 查看當(dāng)前倉庫配置信息 
  8. # git config --local  --list 

創(chuàng)建git倉庫

  1. // 在當(dāng)前目錄新建一個Git代碼庫 
  2. # git init 
  3. // 克隆一個項目和它的整個代碼歷史(版本信息) 
  4. # git clone [git@github.com:cscsss/learnHome.git] 

git的原理

  • 項目文件(Directory):使用Git管理的一個目錄,也就是一個倉庫,包含我們的工作區(qū)(WorkSpace)和 Git的管理空間(.git)
  • 工作區(qū)(Workspace):就是平時存放項目代碼的地方,一個文件夾而已
  • git管理空間(.git):存放Git管理信息的目錄,初始化倉庫的時候自動創(chuàng)建。里面又包含暫存區(qū)(Index/Stage)和 本地倉庫(Repository)
  • 暫存區(qū)(Index/Stage):用于存放你的臨時改動信息,保存即將提交到文件列表信息??捎糜诒4?恢復(fù) WorkSpace 中的臨時狀態(tài)
  • 本地倉庫(Repository):這里面存放你提交到所有版本的數(shù)據(jù)。其中HEAD指向最新放入倉庫的版本
  • 遠(yuǎn)程倉庫(Remote):托管代碼的服務(wù)器,和本地倉庫作用類似,不過它是公共的

狀態(tài)轉(zhuǎn)移流程

  • 未跟蹤(Untracked): 此文件僅僅在 workspace 中,但并沒有加入到 git 倉庫,不參與版本控制。通過 git add 狀態(tài)變?yōu)? Staged
  • 文件已經(jīng)入庫(Unmodify): 未修改,即版本倉庫中的文件快照內(nèi)容與 workspace 中完全一致。這種類型的文件有兩種變化,如果它被修改,而變?yōu)? Modified。如果使用 git rm 移出版本庫,則成為 Untracked 文件
  • 文件已修改(Modified): 僅僅是修改, 并沒有進(jìn)行其他的操作。通過 git add 可進(jìn)入暫存 Staged 狀態(tài),使用 git checkout 則丟棄修改過,返回到 unmodify 狀態(tài),這個 git checkout 即從庫中取出文件,覆蓋當(dāng)前修改
  • 暫存狀態(tài)(Staged): 執(zhí)行 git commit 則將修改同步到倉庫中,這時庫中的文件和 workspace 文件又變?yōu)橐恢?,文件? Unmodify 狀態(tài)。執(zhí)行g(shù)it reset branchName fileName取消暫存。文件狀態(tài)恢復(fù)為 Modified圖片

文件操作命令

查看文件狀態(tài)

  1. // 查看所有文件狀態(tài) 
  2. # git status 
  3. // 查看指定文件狀態(tài) 
  4. # git status [fileName] 

添加文件與目錄

  1. // 添加指定文件到暫存區(qū) 
  2. # git add [file1] [file2] ... 
  3. // 添加指定目錄到暫存區(qū),包括子目錄文件 
  4. # git add [dir] 

移除文件與目錄

  1. // 將文件從暫存區(qū)和工作區(qū)中刪除 
  2. # git rm <fileName> 
  3. // 將 fileName 從暫存區(qū)刪除文件,仍保留在當(dāng)前工作目錄中 
  4. # git rm --cached <fileName> 

文件提交 git commit

  1. // 將暫存區(qū)文件提交到本地倉庫區(qū),message為說明信息 
  2. # git commit -m [message]  
  3. // 將暫存區(qū)的指定文件 fileName 提交到本地倉庫 
  4. # git commit [fileName] -m [message]  
  5. // 追加漏提交的暫存區(qū)文件。等價 git add . +  git commit -m 'message' 
  6. # git commit --amend -m [message]  

查看文件狀態(tài)及歷史 git log

  1. # git log  //查看提交歷史 
  2. # git log --oneline //以精簡模式顯示查看提交歷史 
  3. # git log -p <fileName> //查看指定文件的提交歷史 
  4. # git blame <fileName> //以列表方式查看指定文件的提交歷史 

git diff 比較差異

  1. // 顯示暫存區(qū)和工作區(qū)的全部差異 
  2. # git diff  
  3. // 顯示 filepath 路徑文件中,工作區(qū)與暫存區(qū)的差異 
  4. # git diff filePath    
  5. // 顯示在工作區(qū) filePath 文件與 HEAD 分支的差異 
  6. # git diff HEAD filePath  
  7. // 顯示在工作區(qū)的 filePath 文件與某次提交 commitId 的差異 
  8. # git diff commitId filePath  

git reset 代碼回退

  • 有時提交了一些錯誤代碼,我們想回滾怎么辦,可以使用 git reset 重設(shè)置代碼版本號。git reset 有三種模式 。soft、mixed、hard
  1. // git reset [--soft | --mixed | --hard] [HEAD] 
  2. // git reset [--soft | --mixed | --hard] [commit] 
  3. # git reset –hard HEAD~3  //會將最新的3次提交全部重置,就像沒有提交過一樣 
  4. # git reset 003444c77bae2b0874be17b81a829cfb1237d9ce //重置到003444c7 
  • --hard 模式

重置 HEAD 在當(dāng)前分支到某次 commit 時,工作目錄里的新改動和已經(jīng) add 到 stage 暫存區(qū)的新改動會全都消失。工作目錄(workspace)、暫存區(qū)(index/stage)及本地倉庫(repository)重置成目標(biāo) commit 的內(nèi)容,所以效果看起來等同于清空暫存區(qū)和工作區(qū)

  • --soft 模式

--soft 模式在重置 HEAD 時,會保留工作目錄和暫存區(qū)中的內(nèi)容,并把重置 HEAD 所帶來的新的差異放進(jìn)暫存區(qū),保留工作目錄(workspace)和暫存區(qū)(index/stage)的內(nèi)容,只讓 repository 中的內(nèi)容和 reset 節(jié)點保持一致,原節(jié)點和 reset 節(jié)點之間的「差異變動」會放入暫存區(qū)中(index/stage)

--mixed 模式圖片git reset 如果不加參數(shù),那么默認(rèn)使用 --mixed 參數(shù)。mixed 模式會保留 工作目錄(workspace)的內(nèi)容,但會將暫存區(qū)(index/stage) 和 Repository 中的內(nèi)容重置成 reset 節(jié)點一致,因此原節(jié)點和 reset 節(jié)點之間的「差異變動」會放入工作目錄(workspace)

git revert

如果我們想撤銷之前的某一版本,但是又想保留 commitId 提交之后的版本

  1. # git revert -n commitId 

分支操作命令

新建分支

  1. // 基于當(dāng)前分支新建一個分支,并且切換到新的分支 lwl 
  2. # git checkout -b lwl   
  3. // 基于遠(yuǎn)程分支 originBranch 并新建分支 csc 
  4. # git checkout -b csc originBranch 
  5. // 新建一個 csc 分支,但是仍停留在原來分支 
  6. # git branch csc  
  7. // 切換到 csc 分支 
  8. # git checkout csc  

git push

  1. ~~ 將本地分支的更新全部推送到遠(yuǎn)程倉庫 master 分支 
  2. # git push origin master  
  3. ~~ 刪除遠(yuǎn)程 branchname 分支 
  4. # git push origin -d <branchName>    

刪除分支

  1. # git branch -D <branchname>   
  2. ~~ 刪除本地 dev1 分支 
  3. # git branch -D dev1  

分支合并

git-merge 命令是用于從指定的commit(s)合并到當(dāng)前分支的操作

  1. # git merge branchName //當(dāng)前分支和 branchName 合并 
  2. # git merge -m <msg> <commit> //當(dāng)前分支和 branchName commit及之前的提交合并 
  3. # git merge --abort // 取消合并 
  • 當(dāng)產(chǎn)生合并沖突時,該部分會以<<<<<<<, =======和 >>>>>>>表示。在=======之前的部分是當(dāng)前分支這邊的情況,在=======之后的部分是對方分支的情況
  • 解決完沖突的地方后使用git add加入到index中,然后使用git commit產(chǎn)生合并節(jié)點

git pull/git fetch

  • git fetch 可以拉取遠(yuǎn)程倉庫的代碼
  1. ~~ 拉取所有遠(yuǎn)端的最新代碼 
  2. # git fetch --all   
  3. ~~ 拉取遠(yuǎn)程最新 master 分支代碼(指定 master 分支) 
  4. # git fetch origin master  
  • git pull。它不僅會拉取遠(yuǎn)程分支,還會合并遠(yuǎn)端和本地代碼,即:git pull = git fetch + git merge
  1. ~~ 拉取遠(yuǎn)程倉庫分支,更新并合并到本地分支 
  2. # git pull   
  3. ~~ 將遠(yuǎn)程 master 分支合并到當(dāng)前本地 master 分支 
  4. # git pull origin master  
  5. ~~ 將遠(yuǎn)程 master 分支合并到當(dāng)前本地 lwl 分支,冒號后面表示本地分支 
  6. # git pull origin master:lwl  

git rebase 合并

git rebase master 命令會把當(dāng)前分支 curBranch 里的每個提交(commit)取消掉,并且把它們臨時保存為補(bǔ)丁(patch)(這些補(bǔ)丁放到".git/rebase"目錄中),然后把 curBranch 分支更新為 master 分支最新提交,最后把保存的這些補(bǔ)丁應(yīng)用到 curBranch 分支上

在 rebase 的過程中,也許會出現(xiàn)沖突(conflict)。在這種情況,Git會停止rebase并會讓你去解決 沖突;在解決完沖突后,用 git add 命令去更新這些內(nèi)容的索引(index), 然后,你無需執(zhí)行 git-commit,只要執(zhí)行g(shù)it rebase --continue

  1. # git rebase branchName // branchName 合并到當(dāng)前分支 
  2. # git rebase --continue // 解決沖突后繼續(xù)合并 
  3. # git rebase --abort //取消合并 
  4. # git rebase -i HEAD~2 //合并提交 --- 2表示合并2個。也可以是3... 

如果 git rebase master 之后。需要將當(dāng)前分支 curBranch的代碼移到 master??梢栽俅问褂?git merge。此時合并后 master 的提交是一條線性 commit

git tag

  • tag 對應(yīng)某次 commit, 是一個點,是不可移動的。branch 對應(yīng)一系列commit,是很多點連成的一根線,有一個HEAD 指針,是可以依靠 HEAD 指針移動的。所以,兩者的區(qū)別決定了使用方式,改動代碼用 branch,不改動只查看用 tag
  • 創(chuàng)建 tag 是基于本地分支的 commit,而且與分支的推送是兩回事,就是說分支已經(jīng)推送到遠(yuǎn)程了,但是 tag 并沒有,如果要把 tag 推送到遠(yuǎn)程分支上,需要另外執(zhí)行 tag 的推送命令
  1. # git tag <tagName> //基于最新的 commitId 創(chuàng)建 tagName 
  2. # git tag -a <tagName> <commitId> // 基于某次 commitId 創(chuàng)建 tagName 
  3. # git push origin <tagName> //推送到遠(yuǎn)程倉庫 
  4. # git push --tags //推送所有標(biāo)簽 
  5.  
  6. # git tag -d <tagName> // 刪除本地 tag  
  7. # git push origin :refs/tags/<tagName> // 刪除遠(yuǎn)程 tag  

歡迎指正文中錯誤

參考文章

 

  • 一個小時學(xué)會Git[1]
  • 程序員必備基礎(chǔ):Git 命令全方位學(xué)習(xí)[2]
  • Git Reset 三種模式[3]

 

責(zé)任編輯:武曉燕 來源: 潛行前行
相關(guān)推薦

2021-06-13 09:01:47

SedLinux命令

2011-04-18 10:52:17

Jpcap

2010-05-21 12:27:22

SVN使用教程

2010-06-30 10:46:20

Linux SNMP安

2010-10-13 15:02:09

Rsync同步FreeBSDCentOS

2010-08-03 15:23:29

CentOS 5.3

2015-10-12 09:34:29

git教程

2013-03-04 14:24:58

Google Maps

2013-02-28 13:35:02

Google Maps

2014-07-28 14:43:14

git開源

2009-12-08 12:24:36

LinuxNTFS分區(qū)寫操作

2010-03-11 11:12:30

vCenter日志文件

2010-06-07 10:00:32

安裝配置IPv6

2009-06-03 14:19:34

Struts2Guice

2017-09-29 17:20:13

大數(shù)據(jù)MySQLsqlyog

2021-11-04 08:00:04

模式開發(fā)設(shè)計

2011-07-12 10:24:11

域控制器

2020-05-10 16:59:56

Python裝飾器開發(fā)

2021-06-04 05:16:33

瀏覽器js源碼

2021-06-07 00:15:26

瀏覽器HtmlParser
點贊
收藏

51CTO技術(shù)棧公眾號