陳拓 [email protected] 2020/03/06-2020/03/08
0. 概述
Gitee和GitHub都是基於Git的代碼管理平臺。
Github是國外的,Gitee是國內的。
Gitee和GitHub都要用Git命令操作。
要使用Git命令先要在電腦上安裝Git工具軟件。
下面在樹莓派上以Gitee爲例演示Git的基本操作。
1. 安裝git
在電腦上用putty登錄樹莓派,如果不熟悉請看《電腦連接樹莓派3B+》
https://blog.csdn.net/chentuo2000/article/details/103332186
- 測試git --version
如果沒有安裝。
- 安裝git
sudo apt-get install git
2. 在碼雲gitee上創建一個倉庫
https://gitee.com/chentuo2000/My-ESP8266
3. Git 全局設置
- 用戶名
告訴git你的名字,這個名字會出現在你的提交記錄中。
git
config --global user.name
"chentuo"
然後是你的Email,同樣,這個Email也會出現在你的提交記錄中,請儘量保持此Email和您的碼雲的註冊Email一致。
git
config --global user.email
"[email protected]"
- 查看全局設置
ls -la
全局設置保存在.gitconfig中,查看全局設置cat .gitconfig。
4. Git 基本操作
4.1 clone
把我在gitee上創建的倉庫克隆到本地。
git clone https://gitee.com/chentuo2000/My-ESP8266.git
ls –l
cd My-ESP8266/
這個目錄和普通的目錄有什麼不同呢?ls –la
它比普通的目錄多了一個.git目錄,裏面存放倉庫信息。
4.2 pull
在雲端創建一個子目錄tarballs,用git pull命令同步到本地倉庫。
git pull
4.3 push
往本地目錄tarballs中複製一個文件。
cp esp/esp-open-sdk/./crosstool-NG/.build/tarballs/binutils-2.25.1.tar.gz My-ESP8266/tarballs/
cd My-ESP8266/
- git status
命令用於查看項目的當前狀態。
- git add
命令將該文件添加到緩存。
git add tarballs/binutils-2.25.1.tar.gz
再看看狀態的變化,狀態命令加-sb參數,以獲得簡短的結果輸出。
git status -sb
綠色的A表示Add成功。
- git commit
然後使用git commit -m "註釋"命令將add過的內容提交到本地倉庫,並添加一些註釋信息,方便閱讀。
git commit -m "編譯esp-open-sdk的依賴庫"
再看看狀態:
git status -sb
git status
提示:在主分區,1個提交的分支前綴是origin/master,使用git push發佈本地提交。
工作樹已經清空了。
- git push
同步雲端倉庫git push
- 查看狀態
git status
git status -sb
上傳完成,沒有提交的文件了,工作樹清空。
- 看看雲端
5. 多文件上傳
注意:一次上傳有100MB的限制。
5.1工作區,緩存區,本地倉庫區,雲端倉庫
工作區就是上面我們git clone下來的整個項目目錄My-ESP8266。
緩存區是一個隱藏的區域,用git add添加。
本地倉庫也是隱藏的,用git commit命令將緩存區的文件提交到本地倉庫。
用git push將本地倉庫同步到雲端。
5.2 git add多個文件
上傳文件列表ls -l tarballs/
- 添加多個文件到緩存
git add file_1 file_2 file_3
多個文件用 空格 隔開。
文件比較多時可以使用通配符*添加所需要的文件。
也可以整個目錄add,像這樣:git add . 意思是把當前目錄(.表示當前目錄)裏面的變動都加到緩存。
或者用git add tarballs/g*將目錄tarballs中以g開頭的文件添加到緩存。
或者像下面。
- 添加目錄tarballs到緩存
git add tarballs
git status
git status –sb
看看目錄
可以看到,只添加了新文件,之前我們上傳過的文件binutils-2.25.1.tar.gz,因爲沒有變化,所以並沒有添加到緩存。
- git reset HEAD
用use git reset HEAD <file>命令可以從緩存移除文件。例如:
git reset HEAD tarballs/cloog-0.18.4.tar.gz
git status
git status -sb
可以看到tarballs/cloog-0.18.4.tar.gz已經從緩存中移除了。
git reset命令中的HEAD指向當前我們所在版本庫,是一個地址指針的頭。
看看日誌git log
有3個commit,每個commit對應一個指針:
e07cfbf37e2af1fc1ded1b196178b0231e88a9c4
2eae215d0213343fa07f66a5d1116e24ae2f8406
d9c752f40aa055831eefa02b36b5e928c7fca155
再看看簡短日誌git log –oneline(一條提交信息用一行顯示)
e07cfbf、2eae215、d9c752f是3個指針地址的頭,HEAR當前指向master地址的頭e07cfbf
所以下面兩句作用是一樣的。
git reset HEAD tarballs/cloog-0.18.4.tar.gz
git reset e07cfbf tarballs/cloog-0.18.4.tar.gz
例如:
git reset e07cfbf tarballs/expat-2.1.0.tar.gz
git status -sb
緩存清空了,有2個未操作的新文件。
之前我們上傳過的文件binutils-2.25.1.tar.gz有問題,重新下載,和之前比較大小有變化:
添加目錄tarballs到緩存
git add tarballs
看看狀態:
tarballs/binutils-2.25.1.tar.gz是修改過Modified的文件
tarballs/cloog-0.18.4.tar.gz
tarballs/expat-2.1.0.tar.gz
是新Add的文件,也就是沒有和雲端同步過的文件。
5.3 git commit多個文件
git commit -m '提交多個文件'
看狀態:
可以用git commit --amend打開編輯器修改。
如果想撤回,可以用:
git reset --soft撤回git commit –m
git reset --mix撤回git commit –m和git add
git reset –-hard回退git commit –m、git add和工作區
5.4 git push多個文件
同步雲端倉庫git push
- 看狀態
- 看雲端倉庫
5.5 回退
Your branch is ahead of 'origin/master' by 2 commits.
這表示在你之前已經有2個commit而沒有push到遠程分支上,所以需要先git push origin **將本地分支提到遠程倉庫。
如果不想同步雲端,也可以用git reset --hard HEAD~x取消,這裏的x表示的就是在這之前已經有多少次的提交,這句命令的意思就是直接回退到x 個commit之前
注意:這兩次提交所改動的代碼文件都沒有了,慎用!
在我們這裏:
git reset --hard HEAD~2
git status
git status -sb
緩存已經清空了,目錄中相關的文件也刪除了。
6. 在本地創建一個倉庫
在上面的操作中我們先在gitee上創建倉庫,再克隆到本地。如果我們在本地已經有了一個項目目錄要上傳的gitee上,可以像下面這樣操作。
- 創建本地倉庫
mkdir My-ESP32
cd My-ESP32
git init
git init的功能就是將本地目錄初始化爲本地倉庫。
查看目錄ls –la
多了一個隱藏目錄.git
查看狀態git status
- 創建一個文件
touch README.md
nano README.md
寫一些內容,保存,退出。
查看狀態git status
git status –sb
?? README.md是一個新文件。
- git add README.md
查看狀態:
- git commit -m "first commit"
查看狀態:
- 創建雲端倉庫
- 關聯本地倉庫和雲端倉庫
git remote add origin https://gitee.com/chentuo2000/My-ESP32.git
執行完這個命令在本地的.git/config中寫了遠程信息[remote "origin"]
Origin是Git默認的遠程倉庫名字,也可以改成別的名字,但最好是遵從習慣,這樣你一看到origin就知道是遠程倉庫。
- 同步雲端倉庫
git push -u origin master
master是默認的本地分支,origin/master是默認遠程分支origin/master。
查看雲端倉庫:
7. 分支
7.1 默認分支
Origin默認遠程服務器
origin/master默認遠程分支
master默認本地分支
7.2 分支的用途
- 多人開發時
爲了不受其他開發人員的影響,每個人可以在主分支上建立自己的專屬分支,自己的開發工作完成後可以將自己分支上的工作合併到主分支。
因爲每一次提交的歷史記錄都會被保存,所以當發生問題時,定位和修改造成問題的提交就容易多了。
Git分支是由指針管理的,所以創建、切換、合併、刪除分支都非常快,非常適合大型項目的開發。
主分支(默認創建的Master分支)只用來發布重大版本(對於每個版本可以創建不同的標籤,以便於查找),日常開發應該在另一條分支上進行。
- 多種方案時
例如,在一個項目的進行中,你遇到了一個問題,解決方案不確定,但是你不希望因此影響到當前的開發,那麼你可以爲此創建一個分支,分支包含目前主幹上的所有內容,然後在分支上測試你的方案,而絲毫不影響主幹的進行;如果可行那麼可以通過合併分支功能將你的更新應用到主幹,反之你可以放棄它。
7.3 分支操作
- 查看分支
1) 查看本地分支git branch
2) 查看遠程分支git branch –-r
3) 查看所有分支git branch –-all
分支前有一個 * 號代表當前分支。
- 創建並切換分支
1) 創建分支:git branch <分支名稱>
2) 切換分支:git checkout <分支名稱>
3) 創建並切換分支:git checkout -b <分支名稱>
- 合併分支
1) 先切換到master分支:git checkout master
2) 再將分支的代碼合併到master:git merge <分支名稱>
在合併分支的時候如果代碼會有衝突,需要自己去處理這些衝突。
- 刪除分支
1) 刪除本地分支:git branch -d <分支名稱>
2) 刪除遠程分支:git push origin <分支名稱>
- 恢復分支
誤刪的分支可以恢復。
1) 使用git log查出分支的提交號
2) git branch <分支名稱> <提交號>
即創建提交號歷史版本的一個分支,分支名稱隨意。
- 查詢分支
1) 查詢分支:git log
2) 查詢分支簡短顯示:git log –oneline
3) 查看分支圖:git log --graph
可以帶參數:
git log --graph --pretty=oneline --abbrev-commit
- 重命名分支
git branch -m <當前分支名> <新的分支名>
其他的用法請看後面的參考文檔。
參考文檔
- Git官方文檔
https://git-scm.com/book/zh/v2 - Gitee官方文檔
https://gitee.com/oschina/git-osc/wikis/%E5%B8%AE%E5%8A%A9 - git操作手冊
https://www.jianshu.com/p/05a22c6a4131 - gitee 命令集合
https://www.cnblogs.com/TF511/articles/10645857.html - Git使用教程---以Gitee碼云爲例
https://www.jianshu.com/p/a146bd847a8d - git分支
https://blog.csdn.net/qq_36672905/article/details/82776293?depth_1-utm_source=distribute.pc_relevant.none-task&utm_source=distribute.pc_relevant.none-task