1、Linux基礎指令
cd .. //返回上級目錄
cd d: //進入d盤
ls -al //查看文件列表
cat dome.txt //查看文件
touch dome.txt //創(chuàng)建文件
rm dome.txt //刪除文件
vim 文件名 //編輯文件

2、git的基本概念
Workspace:工作區(qū)
Index / Stage:暫存區(qū)(緩存區(qū))
Repository:倉庫區(qū)(或本地倉庫)
Remote:遠程倉庫
2.1 git 初始化
git的初始化有兩種,一種是還沒有倉庫自己新建,使用git init 初始化倉庫;
一種是已經(jīng)有倉庫了,通過git clone 拉取倉庫到本地。
git init //當前目錄下初始一個倉庫,多一個.git的隱藏文件夾
git config --global user.name 'lisan' //配置本地倉庫用戶名
git config --global user.email 'lisan@email.com' //配置本地倉庫用戶郵件
或者
git clone <path> //克隆gitcode
git remote add [shortname] [url] //添加遠程庫
例子:
克隆遠程倉庫
$ git clone git://github.com/schacon/grit.git
關聯(lián)遠程倉庫
$ git remote add origin https://github.com/user/repo.git
補充:config的幾種作用域
global 用戶權限
system 系統(tǒng)權限
local 當前目錄權限
2.2、git基礎指令-添加、提交、查看、刪除、回退
a、添加
基本操作略...
git add read.md //添加文件到緩存區(qū)
git add . //該目錄下所有文件添加到緩存區(qū)
git add -a //項目內全部文件添加到緩存區(qū)
b、提交
基本操作略...
git commit -m "mrak" //提交本地倉庫
git commit -am "mark" //提交本地倉庫、與上面不同的是我們可以少了git add操作(只限于已經(jīng)存在于緩存區(qū)的文件,也就是說如果你新建了個test文件,如果沒git add,這里不會提交到倉庫,還是老老實實add后commit。)
git commit --amend //修改最后一次提交commit的msg
c、查看
基本操作略...
git log -n 查看最近n次改動(常用)
git log --oneline //簡潔記錄
git log --graph //圖形化顯示commit
git log --reverse --oneline //反向查看記錄
git log --oneline --graph //歷史中出現(xiàn)了分支、合并
git status //查看文件狀態(tài)(常用)
git status -s //查看狀態(tài) 簡潔模式
d、刪除
基本操作略...
git checkout read.md //回復工作區(qū)文件內容到倉庫最新版本的文件內容
git rm <file> //刪除工作區(qū)內容
git rm <file> --cached //刪除緩存區(qū)內容,工作區(qū)不受影響(比如.gitignore配置是我們可能會用到這個功能)
e、退回版本
開發(fā)中難免會提交錯commit、因此git為我們提供了撤銷commit的方法。
這里有個重點,沒錯就是HEAD,在使用git中我們常常會看到HEAD,那么HEAD到底是什么呢?我們知道在git中可能會有很多branch和commit,為了知道我們當前工作區(qū)提交到那個branch,所以需要個指針指向當前指向的branch的commit。HEAD可以簡單理解成這個指針。(實際,HEAD指向的是當前分支,在每個分支上都有一個指針指向最新的commit,而HEAD始終是指向當前分支的指針,所以可以簡單理解HEAD就是指針)

git reset HEAD read.md //撤銷添加到緩存區(qū)的內容
git reset HEAD^ //回退一個commit
git reset HEAD~3 //向上回退3個commit
git reset commit_id //回退指定版本
git reset 841125 //回到commit_id=841125的提交
git reset 841125 和 git HEAD~3得到的結果是一樣的
第一個方法讓git回退到841125的commit 也就是倒數(shù)第三個commit;
第二個方法讓指針(HEAD)回退3個節(jié)點(commit);
需要注意的是reset后面還可以跟 --hard、--mixed、--soft等參數(shù)
--mixed 影響倉庫和暫存區(qū) (reset HEAD and index)(默認值)
--soft 影響倉庫 (reset only HEAD)
--hard 影響倉庫、暫存區(qū)和工作區(qū) (reset HEAD, index and working tree)
當我們git reset后不跟參數(shù)、默認是--mixed,也就是只對暫存區(qū)和倉庫進行回退。
下面是最近三次的commit
commit 676249486735497db288f6654c7295d13125ec56 (HEAD -> master, origin/master, origin/HEAD)
最新commit
commit 2d751a62100e2f5af58d35923c84d6f8bc98cd0b
倒數(shù)第二commit
commit 841125dc92f4929fa0fe5622cff1f93af4bebf02
倒數(shù)第三commit
git revert
生成一個新的提交來撤銷某次提交,此次提交之前的所有提交都會被保留。
$ git revert <commit ID>
f、撤銷工作區(qū)中文件
撤銷單個文件修改,使用下面命令:
$ git checkout -- 文件名
撤銷所以文件修改,使用下面命令:
$ git checkout .
2.4 本地分支
a、 查看分支
略略略...
git branch //查看分支
git remote -vv //查看遠程分支
git branch -a //查看本地和遠程分支(所有分支)
git branch -vv //查看本地分支關聯(lián)遠程分支,及最近的一次提交
b、 創(chuàng)建、刪除、切換
略略略...
git branch <分支name> //創(chuàng)建分支
git branch -d <分支name> //刪除分支
git fetch -p //清理已經(jīng)被刪除的遠程分支
git checkout <分支name> //切換分支
git checkout -b [分支名] [遠程名]/[分支名] //切換并創(chuàng)建
3、 合并
每個需求新建一個分支開發(fā),能很好的解決多個需求在一個分支里造成的混亂。
多人合作開發(fā),創(chuàng)建分支開發(fā)真的是用了都說好。所以不可避免的我們需要合并自己的分支和同事的分支。
合并分支如果沒有沖突,git里只是把指針指向了最新的commit。我們稱之為fast-forward。
如果有沖突,這需要解決沖突,然后提交分支。
git merge <branch> //branch被合并到當前分支
git rebase master <branch> # 將master rebase到branch
merge和rebase都是合并分支,那么有什么區(qū)別呢?
主要區(qū)別在于,merge會保留分支的真實信息,而rebase會把分支上的commit融合到當前分支上。
直接放鏈接,解釋的很清楚
開發(fā)一般都用merge,當然你非要用rebase合并分支也可以。
2.5、 遠程分支
終于到最最重要的部分了,沒有遠程的git是么有靈魂的。
git pull # 抓取遠程倉庫所有分支更新并合并到本地
git pull --no-ff # 抓取遠程倉庫所有分支更新并合并到本地,不要快進合并
git fetch origin # 抓取遠程倉庫更新
git merge origin/master # 將遠程主分支合并到本地當前分支
git push # 推送所有分支 (這個后面默認是 當前的分支對應的origin master)
git push origin master # 將本地主分支推到遠程主分支
git push -u origin master # 將本地主分支推到遠程(如無遠程主分支則創(chuàng)建,用于初始化遠程倉庫)
git push origin <local_branch> # 創(chuàng)建遠程分支, origin是遠程倉庫名
git push origin <local_branch>:<remote_branch> # 創(chuàng)建遠程分支
git push origin :<remote_branch> #先刪除本地分支(git br -d <branch>),然后再push刪除遠程分支
git pull實際上有兩個步驟,拉取遠程倉庫和合并拉取的內容,等同于,git fetch origin(拉?。?+ git merge brName(合并)
如果遠程倉庫創(chuàng)建了分支a,但是我們本地還沒有分支a,所以我們先本地創(chuàng)建分支a,但是git push時你會發(fā)現(xiàn),我們沒有關聯(lián)到遠程分支無法推送,只是我么要用到git branch -u origin a這個方法本地分支a關聯(lián)到遠程分支a,之后我們就可以推送了。關聯(lián)遠程分支前別忘了先git pull,為啥?遠程雖然新建了分支a,但是我們本地還不知道,所以需要git pull 獲取遠程的狀態(tài)??赡苡行﹣y,下面分解下1.git pull 獲取遠程信息 2. git checkout -b a 本地創(chuàng)建分支b 3. git branch -u origin a 關聯(lián)遠程分支a 4.git push 推送成功
一般情況下,我們提交到遠程倉庫,只需要git push即可,但是有時可能出現(xiàn)下面這種情況本地分支a關聯(lián)的是遠程分支b,雖然很很少見。這時如果在使用git push會推送失敗,我需要完整的寫出git push origin b進行推送。
4、 標簽tag
用于對發(fā)布版本進行標記,這是最常見的應用場景。
git tag -a v1.0 添加標簽
git checkout tagname 切換到 tag code
git log --oneline --decorate --graph 可以查看標簽
5、查看文件diff
實際開發(fā)中,我基本沒有用這個命令,還是在AS對比文件、解決沖突舒服。。。
git diff 比較工作區(qū)和暫存區(qū)的文件差異
git diff HEAD 比較工作區(qū)和倉庫的文件差異
git diff --cached 比較倉庫和暫存區(qū)之間的差異git diff <file> # 比較當前文件和暫存區(qū)文件差異
git diff --stat # 僅僅比較統(tǒng)計信息
git diff <branch1>..<branch2> # 在兩個分支之間比較
git diff <id1><id2> # 比較兩次提交之間的差異
5、保存到隱藏區(qū)(常用)
應用場景,假如在develop分支上我們正在開發(fā)分支,這是突然有個bug需要我們修復,但是我們又不能在develop分支上直接修改,這時需要我們切換到需要修復bug的那個分支上修復bug,假設這個分支是a。
git stash 保存當前修改到stash中
git stash save “message” 保存帶msg的當前修改到stash中
git stash list 查看stash中存儲的列表
git stash pop 從stash中提取出最新的保存到當前分支
git stash pop stash@{1} 從stash中提取標記為@{1}的修改到本地
git stash apply 回復工作區(qū)不刪除stash內容,與pop不同的是不會刪除stash區(qū)的內容
git stash drop stash@{0} 刪除stash內容(通常和apply配合使用)
6、 其他
應用場景:分支b中的一個commit_id=5689k的commit,分支a中沒有這個id為5689k的commit,如果分支a需要這個commit的內容,如果一個一個復制也不失是一種辦法,但是這樣實在是有些低效率,所以git為我們提供了快捷的方法。
git cherry-pick commit_id
在分支a上 git cherry-pick 5689k 即可把5689k的commit內容合并到a分支上路了。
git使用小技巧
$ git checkout - 快速切換到上一個分支
$ git config --global alias.co checkout //設置別名
$ git config --global alias.br branch
$ git config --global alias.ci commit
$ git config --global alias.st status
開發(fā)中用的命令基本總結完了,可能會有遺漏想起里會補充的,有什么錯誤歡迎大家指出。(* ̄︶ ̄)