
SourceTree圖形界面化操作
頂部工具欄
提交:提交改動(dòng)到本地倉庫 ,相當(dāng)于git commit -m '提交的內(nèi)容'
拉?。簭倪h(yuǎn)程拉取最新版本到本地 自動(dòng)合并 ,相當(dāng)于git pull
推送:提交本地的文件/改動(dòng)到遠(yuǎn)程倉庫,相當(dāng)于git push
抓?。簷z測遠(yuǎn)程是否有更新,如果有變動(dòng)會(huì)在拉取右上角出現(xiàn)數(shù)字角標(biāo)。從遠(yuǎn)程獲取最新版本到本地 , 不會(huì)自動(dòng)合并 相當(dāng)于git fetch
拉取/抓取區(qū)別:
pull(拉取)的話,下拉遠(yuǎn)程分支并與本地分支合并。fetch(抓取)只是下拉遠(yuǎn)程分支,沒有合并本地代碼
分支:新建本地分支 ,相當(dāng)于git checkout -b 新分支的名字
合并:合并本地分支,相當(dāng)于git merge 分支的名字
貯藏:當(dāng)我們想要保存某個(gè)狀態(tài)的內(nèi)容,可選擇貯藏;相當(dāng)于git stash
額外補(bǔ)充—— 貯藏使用場景:在實(shí)際開發(fā)中經(jīng)常有這樣的事情發(fā)生,當(dāng)你正在進(jìn)行項(xiàng)目中某一部分的工作,還未完成,只做了一半,而你想轉(zhuǎn)到其他分支上進(jìn)行一些工作。問題是,你不想提交進(jìn)行了一半的工作,否則以后你無法回到這個(gè)工作點(diǎn)。解決這個(gè)問題的辦法就是git stash命令。
“貯藏” 可以獲取你工作目錄的中間狀態(tài)——也就是你修改過的被追蹤的文件和暫存的變更——并將它保存到一個(gè)未完結(jié)變更的堆棧中,隨時(shí)可以重新應(yīng)用。
終端:打開電腦終端,可使用指令操作當(dāng)前倉庫
設(shè)置:可以配置倉庫提交代碼模版,遠(yuǎn)程倉庫地址,遠(yuǎn)程倉庫用戶名,版本控制忽略文件等

左側(cè)狀態(tài)欄
WORKSPACE:當(dāng)前本地文件的內(nèi)容/狀態(tài)
分支(branch):本地的分支。前面有空心圈圈的表示當(dāng)前所在分支
標(biāo)簽(tag):可以為不同的分支添加一些標(biāo)簽
遠(yuǎn)端(remote):遠(yuǎn)程倉庫所有的分支

WORKSPACE - 文件狀態(tài)
當(dāng)選中左側(cè)文件狀態(tài)的時(shí)候,中間會(huì)出現(xiàn)三塊區(qū)域:已暫存文件、未暫存文件、文件內(nèi)容;
分支:管理本地分支,可以進(jìn)行分支的新建/切換/刪除/合并等操作
在分支 左側(cè)有個(gè)圓圈的標(biāo)識(shí)符,代表當(dāng)前工作區(qū)所在的分支
選中某個(gè)分支,右鍵,會(huì)出現(xiàn)如下的選擇列表:

檢出xx:切換當(dāng)前分支到該分支, 相當(dāng)于終端的 git checkout 分支名
合并分支1至分支2:將分支1的更改合并到分支2 相當(dāng)于終端的 git merge 分支名
將當(dāng)前變更變基到 xxx(rebase):就是將該分支未更改前的文件基礎(chǔ)更改到某個(gè)版本
推送到 origin/master(已跟蹤):將本地的變更推送到已跟蹤的遠(yuǎn)程分支 相當(dāng)于終端的 git push master
推送到:選擇要推送到的遠(yuǎn)程分支
跟蹤遠(yuǎn)程分支:選擇要跟蹤的遠(yuǎn)程分支,跟蹤后該本地分支會(huì)和跟蹤的遠(yuǎn)程分支對(duì)比是否有改動(dòng)
與當(dāng)前對(duì)比:選中的分支與當(dāng)前分支的對(duì)比
重命名...:重新命名分支
刪除 xxx:刪除當(dāng)前分支;相當(dāng)于終端的git branch -d 分支名
復(fù)制分支名字:復(fù)制分支名稱
創(chuàng)建拉取請(qǐng)求...:創(chuàng)建并切換分支;相當(dāng)于終端的git checkout -b 分支名
git常用命令大全
創(chuàng)建文件的一些命令
touch a //創(chuàng)建一個(gè)a文件
touch bb.json // 創(chuàng)建一個(gè)以.json為后綴的文件
mkdir AA //創(chuàng)建AA文件夾
rm 文件名 //刪除文件
pwd //打印當(dāng)前路徑

文件信息
ls //查看當(dāng)前路徑下面的所有文件名
ls 文件夾名 // 查看對(duì)應(yīng)文件夾中的內(nèi)容
ls -l // 拉出最近git提交記錄以及對(duì)應(yīng)修改的文件名
ls -l -a // 拉出最近git提交記錄以及對(duì)應(yīng)修改的文件名,隱藏的文件也會(huì)顯示
切換路徑
cd ~ // 將工作路徑快速切換到root
cd - // 將工作路徑切換到上一狀態(tài)
cd ../ // 切回到上一個(gè)工作路徑和 cd.. 一致
cd 文件夾名 // 進(jìn)入某個(gè)目錄
cd / // 進(jìn)入根目錄
vim模式
vim 文件名 // 新建一個(gè)文件
i 插入內(nèi)容
按下esc :wq 再按return(保存并退出)
按下esc :q 再按return(直接退出)
vim 模式下 文件中#號(hào)開頭的為注釋
git賬號(hào)信息配置
//給當(dāng)前的git倉庫配置用戶名和郵箱
git config user.name "flowerlflower"
git config user.email "799431668@qq.com"
//給git配置全局的用戶名和郵箱
git config —global user.name "flowerlflower"
git config —global user.email "799431668@qq.com"
常用git 命令
git init // 初始化一個(gè)代碼倉庫
git clone url地址 //將遠(yuǎn)程的版本下載到本地
git clone -b 分支名 地址 // 克隆分支的代碼到本地
git status //查看文件狀態(tài) 紅色:該文件被添加或者被修改,但是沒有添加到git的暫緩區(qū)
git add 文件名 //將某個(gè)文件存入暫存區(qū)
git add xx.h xx.m //將xx.h 和xx.m添加到暫緩區(qū)
git add . //將在工作區(qū)所有不在暫緩區(qū)的所有內(nèi)容添加到暫緩區(qū)
git stash -u -k // 提交部分文件內(nèi)容 到倉庫 例如本地有3個(gè)文件 a b c 只想提交a b到遠(yuǎn)程倉庫 git add a b 然后 git stash -u -k 再然后git commit -m "備注信息" 然后再push push之后 git stash pop 把之前放入堆棧的c拿出來 繼續(xù)下一波操作
git commit -m "提交的內(nèi)容" //將在暫緩區(qū)的所有內(nèi)容提交到本地版本庫,清空暫緩區(qū) (即提交代碼到倉庫)
git checkout . //撤銷,放棄所有的本地文件修改
git log --oneline //拉出所有提交信息 單行顯示
git branch //查看當(dāng)前使用分支(結(jié)果列表中前面標(biāo)*號(hào)的表示當(dāng)前使用分支)
git branch -a //查看遠(yuǎn)程分支(列出遠(yuǎn)程分支以及本地分支名)
git branch -r //列出遠(yuǎn)程分支(遠(yuǎn)程所有分支名)
git branch 分支名 //新建分支
git checkout -b 分支名 //創(chuàng)建并切換分支
git checkout -b test c6f68a8 在提交記錄(c6f68a8)上創(chuàng)建一個(gè)名為test的分支
git checkout 分支名 //切換分支 或 檢出分支
git push // 將本地分支推送到遠(yuǎn)程 (一般直接push)
git push origin 分支名 // 將本地分支推送到遠(yuǎn)程
分支操作
git branch //查看當(dāng)前使用分支(結(jié)果列表中前面標(biāo)*號(hào)的表示當(dāng)前使用分支)
git branch 分支名 //新建分支
//例如 git branch dev1.0 如果本地沒有就創(chuàng)建/獲取 如果
git checkout -b 分支名 //創(chuàng)建并切換分支
git checkout 分支名 //切換分支 或 檢出分支
git branch -v // 查看分支以及提交hash值和commit信息
git merge 分支名 // 把該分支的內(nèi)容合并到現(xiàn)有分支上
git branch -d 分支名 //刪除分支
git branch -D 分支名 // 強(qiáng)制刪除 若沒有其他分支合并就刪除 d會(huì)提示 D不會(huì)
//例如 git branch -D dev1.0
git branch -m 舊分支名 新分支名 // 修改分支名
git branch -M 舊分支名 新分支名 // 修改分支名 M強(qiáng)制修改 若與其他分支有沖突也會(huì)創(chuàng)建(慎用)
git branch -r // 列出遠(yuǎn)程分支(遠(yuǎn)程所有分支名)
git branch -a //查看遠(yuǎn)程分支(列出遠(yuǎn)程分支以及本地分支名)
git push origin 分支名 // 將本地分支推送到遠(yuǎn)程
額外普及
1、遠(yuǎn)程沒有分支,本地也沒有分支
git checkout -b test //創(chuàng)建并切換到新分支
git push --set-upstream origin test //推送到遠(yuǎn)程分支,并且跟蹤遠(yuǎn)程分支
2、遠(yuǎn)程已經(jīng)存在分支,本地不存在對(duì)應(yīng)分支
git checkout --track origin/dev1.0
或者git checkout -b newdev origin/dev1.0(該命令可以設(shè)置不同的分支名,不過非常建議本地分支名和遠(yuǎn)程分支名一樣。)
3、設(shè)置一個(gè)已有的本地分支跟蹤一個(gè)剛剛拉取下來的遠(yuǎn)程分支:
git branch -u origin/test 或者 git branch --set-upstream-to=origin/test
4、刪除本地跟蹤的遠(yuǎn)程分支(不常用)
git branch -r -d origin/branchname
5、刪除git倉庫上的遠(yuǎn)程分支
git push origin --delete branchname
回退操作
git reflog //可以查看所有版本回退的操作
git reset --hard HEAD //回到當(dāng)前版本
git reset --hard HEAD^ //回到上一個(gè)版本
git reset --hard HEAD^^ //回到上上個(gè)版本
git reset --hard HEAD~10 //回到前10個(gè)版本
git reset -- hard 版本號(hào)(前5位) //回到固定版本號(hào) (reset常用操作)例如:git reset --hard 149a6c5
git reset --files // 從倉庫回撤到暫存區(qū)
查看信息
git show HEAD // 查看最后一次提交修改的詳細(xì)信息 也可以用git show 哈希值 查看對(duì)應(yīng)的內(nèi)容
git show HEAD^ // 查看倒數(shù)第二次的提交修改詳細(xì)信息
git log --oneline //拉出所有提交信息 單行顯示
git log -5 //查看前5次提交記錄
git log //查看版本信息
標(biāo)簽操作
git tag //查看列出所有打過的標(biāo)簽名
git tag -d 標(biāo)簽名 // 刪除對(duì)應(yīng)標(biāo)簽
git tag 標(biāo)簽名字 // 在當(dāng)前倉庫打個(gè)標(biāo)簽
git tag foo -m "message" // 在當(dāng)前提交上,打標(biāo)簽foo 并給message信息注釋
git tag 標(biāo)簽名 哈希值 -m "message" // 在某個(gè)哈希值上打標(biāo)簽并且寫上標(biāo)簽的信息
git tag foo HEAD~4 // 在當(dāng)前提交之前的第4個(gè)版本上 打標(biāo)簽foo
推送、拉取
git push origin :refs/tags/遠(yuǎn)程標(biāo)簽名 // 刪除遠(yuǎn)程倉庫的標(biāo)簽
git push origin --tags // 把所有打好的標(biāo)簽推送到遠(yuǎn)程倉庫
git push origin 標(biāo)簽名 // 把指定標(biāo)簽推送到遠(yuǎn)程倉庫
git pull --tags // 把遠(yuǎn)程倉庫的標(biāo)簽也拉取下來
貯藏:
git stash // 把暫存區(qū)的內(nèi)容 暫時(shí)放在其他中 使暫存區(qū)變空
git stash list // 查看stash了哪些存儲(chǔ)
git stash pop // 將stash中的內(nèi)容恢復(fù)到當(dāng)前目錄,將緩存堆棧中的對(duì)應(yīng)stash刪除
git stash apply // 將stash中的內(nèi)容恢復(fù)到當(dāng)前目錄,不會(huì)將緩存堆棧中的對(duì)應(yīng)stash刪除
git stash clear // 刪除所有緩存的stash
刪除忽悠文件
touch.gitignore ->Github->搜索“.gitignore” ->選擇最多星星的->找到Object-C,復(fù)制下來
解決沖突:
同一文件修改沖突,需要手動(dòng)解決沖突后再提交。git status可查看沖突,根據(jù)標(biāo)記可修改沖突部分,修改結(jié)束后再重新提交。
git pull //拉取遠(yuǎn)程內(nèi)容
git log --graph //命令可以看到分支合并圖。
示例: *將本地代碼推送到github
1、去github上創(chuàng)建自己的Repository,創(chuàng)建頁面如下圖所示

2、將鏈接復(fù)制

2、進(jìn)入終端
cd 項(xiàng)目路徑
git init
git add .
git commit -m "Flutter初體驗(yàn)"

將本地的倉庫關(guān)聯(lián)到github上
git remote add origin https://github.com/YYDreams/flutter_helloworld
將本地分支推送到遠(yuǎn)程
git push origin master
再次刷新剛剛創(chuàng)建的github鏈接即可,完畢
文章接近尾聲,額外補(bǔ)充——>Git恢復(fù)之前版本的兩種方法reset、revert(圖文詳解)
有必要了解一下,筆者遇到過一次這種情況。事情經(jīng)過大概:筆者兩天遇到了這么個(gè)問題,將dev分支合到自己的分支之后,如果有沖突就解決沖突,由于閑打印太多,就將AppDelegate中的打印方法注釋了,之后老大就會(huì)將你這個(gè)分支合進(jìn)dev里面去,我們不能直接將代碼合進(jìn)dev里面,只能老大去合,合進(jìn)去老大發(fā)現(xiàn)不對(duì),直接還原(Revert)操作,然后我這個(gè)分支的代碼就在dev上消失了,之后再從最后一次提交的記錄,從這個(gè)節(jié)點(diǎn)拉個(gè)分支 然后把主干的代碼合到這個(gè)分支 然后把這個(gè)分支合到主干,你會(huì)發(fā)現(xiàn)你的代碼怎么合都合不進(jìn)去了。理由:(因?yàn)檫@個(gè)分支之前的 已經(jīng)被合過主干了),人家合你這個(gè)分支的東西也合不到東西。此時(shí)直接revert就好了。