程序員必備基礎(chǔ):Git 命令全方位學(xué)習
文章目錄
Git是什么? Git的相關(guān)理論基礎(chǔ) 日常開發(fā)中,Git的基本常用命令 Git進階之分支處理 Git進階之處理沖突 Git進階之撤銷與回退 Git進階之標簽tag Git其他一些經(jīng)典命令
Git是什么
什么是版本控制?

什么是集中化的版本控制系統(tǒng)?

什么是分布式版本控制系統(tǒng)?
用戶在本地就可以查看所有的歷史版本信息,但是偶爾要從遠程更新一下,因為可能別的用戶有文件修改提交到遠程哦。 用戶即使離線也可以本地提交,push推送到遠程服務(wù)器才需要聯(lián)網(wǎng)。 每個用戶都保存了歷史版本,所以只要有一個用戶設(shè)備沒問題,就可以恢復(fù)數(shù)據(jù)啦~

什么是Git?

Git的相關(guān)理論基礎(chǔ)
Git的四大工作區(qū)域 Git的工作流程 Git文件的四種狀態(tài) 一張圖解釋Git的工作原理
Git的四大工作區(qū)域

Workspace:你電腦本地看到的文件和目錄,在Git的版本控制下,構(gòu)成了工作區(qū)。 Index/Stage:暫存區(qū),一般存放在 .git目錄下,即.git/index,它又叫待提交更新區(qū),用于臨時存放你未提交的改動。比如,你執(zhí)行g(shù)it add,這些改動就添加到這個區(qū)域啦。 Repository:本地倉庫,你執(zhí)行g(shù)it clone 地址,就是把遠程倉庫克隆到本地倉庫。它是一個存放在本地的版本庫,其中HEAD指向最新放入倉庫的版本。當你執(zhí)行g(shù)it commit,文件改動就到本地倉庫來了~ Remote:遠程倉庫,就是類似github,碼云等網(wǎng)站所提供的倉庫,可以理解為遠程數(shù)據(jù)交換的倉庫~
Git的工作流程

從遠程倉庫拉取文件代碼回來; 在工作目錄,增刪改查文件; 把改動的文件放入暫存區(qū); 將暫存區(qū)的文件提交本地倉庫; 將本地倉庫的文件推送到遠程倉庫;
Git文件的四種狀態(tài)

Untracked: 文件還沒有加入到git庫,還沒參與版本控制,即未跟蹤狀態(tài)。這時候的文件,通過git add 狀態(tài),可以變?yōu)镾taged狀態(tài) Unmodified:文件已經(jīng)加入git庫, 但是呢,還沒修改, 就是說版本庫中的文件快照內(nèi)容與文件夾中還完全一致。Unmodified的文件如果被修改, 就會變?yōu)镸odified. 如果使用git remove移出版本庫, 則成為Untracked文件。 Modified:文件被修改了,就進入modified狀態(tài)啦,文件這個狀態(tài)通過stage命令可以進入staged狀態(tài) staged:暫存狀態(tài). 執(zhí)行g(shù)it commit則將修改同步到庫中, 這時庫中的文件和本地文件又變?yōu)橐恢? 文件為Unmodified狀態(tài).
一張圖解釋Git的工作原理

?
日常開發(fā)中,Git的基本常用命令
git clone git checkout -b dev git add git commit git log git diff git status git pull/git fetch git push

git clone
git clone url 克隆遠程版本庫
git checkout -b dev
git checkout -b dev 創(chuàng)建開發(fā)分支dev,并切換到該分支下
git add
git add . 添加當前目錄的所有文件到暫存區(qū)git add [dir] 添加指定目錄到暫存區(qū),包括子目錄git add [file1] 添加指定文件到暫存區(qū)
git add Hello.java 把HelloWorld.java文件添加到暫存區(qū)去
git commit
git commit -m [message] 提交暫存區(qū)到倉庫區(qū),message為說明信息git commit [file1] -m [message] 提交暫存區(qū)的指定文件到本地倉庫git commit --amend -m [message] 使用一次新的commit,替代上一次提交
git commit -m 'helloworld開發(fā)'
git status
git status 查看當前工作區(qū)暫存區(qū)變動git status -s 查看當前工作區(qū)暫存區(qū)變動,概要信息git status --show-stash 查詢工作區(qū)中是否有stash(暫存的文件)

git log
git log 查看提交歷史git log --oneline 以精簡模式顯示查看提交歷史git log -p查看指定文件的提交歷史 git blame一列表方式查看指定文件的提交歷史

git diff
git diff 顯示暫存區(qū)和工作區(qū)的差異git diff filepath filepath路徑文件中,工作區(qū)與暫存區(qū)的比較差異git diff HEAD filepath 工作區(qū)與HEAD ( 當前工作分支)的比較差異git diff branchName filepath 當前分支的文件與branchName分支的文件的比較差異git diff commitId filepath 與某一次提交的比較差異

git pull/git fetch
git pull 拉取遠程倉庫所有分支更新并合并到本地分支。git pull origin master 將遠程master分支合并到當前本地分支git pull origin master:master 將遠程master分支合并到當前本地master分支,冒號后面表示本地分支git fetch --all 拉取所有遠端的最新代碼git fetch origin master 拉取遠程最新master分支代碼

git push
git push origin master 將本地分支的更新全部推送到遠程倉庫master分支。git push origin -d刪除遠程branchname分支 git push --tags 推送所有標簽

?
Git進階之分支處理
git branch git checkout git merge
git branch
git checkout -b dev2 新建一個分支,并且切換到新的分支dev2git branch dev2 新建一個分支,但是仍停留在原來分支

git branch 查看本地所有的分支git branch -r 查看所有遠程的分支git branch -a 查看所有遠程分支和本地分支

git branch -D <branchname> 刪除本地branchname分支
git checkout
git checkout master 切換到master分支
git merge
git merge master 在當前分支上合并master分支過來git merge --no-ff origin/dev 在當前分支上合并遠程分支devgit merge --abort 終止本次merge,并回到merge前的狀態(tài)

?
Git進階之處理沖突
Git合并分支,沖突出現(xiàn)
public class HelloWorld {public static void main(String[] args) {System.out.println("Hello,撿田螺的小男孩!");}}
public class HelloWorld {public static void main(String[] args) {System.out.println("Hello,jay?。?);}}

Git解決沖突
查看沖突文件內(nèi)容 確定沖突內(nèi)容保留哪些部分,修改文件 重新提交,done
1.查看沖突文件內(nèi)容

2.確定沖突內(nèi)容保留哪些部分,修改文件
Git用<<<<<<<,=======,>>>>>>>標記出不同分支的內(nèi)容, <<<<<<>>>>>> dev是指dev分支上修改的內(nèi)容
3.修改完沖突文件內(nèi)容,我們重新提交,沖突done

?
Git進階之撤銷與回退

git checkout git reset git revert
git checkout
git checkout [file] 丟棄某個文件filegit checkout . 丟棄所有文件

git reset
git reset的理解


git reset的使用

git reset HEAD --file回退暫存區(qū)里的某個文件,回退到當前版本工作區(qū)狀態(tài)git reset –-soft 目標版本號 可以把版本庫上的提交回退到暫存區(qū),修改記錄保留git reset –-mixed 目標版本號 可以把版本庫上的提交回退到工作區(qū),修改記錄保留git reset –-hard 可以把版本庫上的提交徹底回退,修改的記錄全部revert。
git reset HEAD file 取消暫存git checkout file 撤銷修改

git log 獲取到想要回退的commit_idgit reset --hard commit_id 想回到過去,回到過去的commit_id

git loggit reset --hard commit_idgit push origin HEAD --force
git revert


git log 得到你需要回退一次提交的commit idgit revert -n撤銷指定的版本,撤銷也會作為一次提交進行保存

?
Git進階之標簽tag
git tag 列出所有taggit tag [tag] 新建一個tag在當前commitgit tag [tag] [commit] 新建一個tag在指定commitgit tag -d [tag] 刪除本地taggit push origin [tag] 推送tag到遠程git show [tag] 查看taggit checkout -b [branch] [tag] 新建一個分支,指向某個tag

?
Git其他一些經(jīng)典命令
git rebase
D---E test/A---B---C---F--- master
D--------E/ \A---B---C---F----G--- test, master
A---B---D---E---C‘---F‘--- test, mastergit stash
git stash 把當前的工作隱藏起來 等以后恢復(fù)現(xiàn)場后繼續(xù)工作git stash list 顯示保存的工作進度列表git stash pop stash@{num} 恢復(fù)工作進度到工作區(qū)git stash show :顯示做了哪些改動git stash drop stash@{num} :刪除一條保存的工作進度git stash clear 刪除所有緩存的stash。

git reflog

git blame filepath

git remote
git remote 查看關(guān)聯(lián)的遠程倉庫的名稱git remote add url 添加一個遠程倉庫git remote show [remote] 顯示某個遠程倉庫的信息
?
參考與感謝
一個小時學(xué)會Git(https://www.cnblogs.com/best/p/7474442.html#_label3_4_0_4)
【Git】(1)---工作區(qū)、暫存區(qū)、版本庫、遠程倉庫(https://www.cnblogs.com/qdhxhz/p/9757390.html)
Git Reset 三種模式(https://www.jianshu.com/p/c2ec5f06cf1a)
Git恢復(fù)之前版本的兩種方法reset、revert(圖文詳解)(https://blog.csdn.net/yxlshk/article/details/79944535)
Git撤銷&回滾操作(git reset 和 get revert)(https://blog.csdn.net/asoar/article/details/84111841)
為什么要使用git pull --rebase?(https://www.jianshu.com/p/dc367c8dca8e)
有道無術(shù),術(shù)可成;有術(shù)無道,止于術(shù)
歡迎大家關(guān)注Java之道公眾號
好文章,我在看??
評論
圖片
表情
