Git學習整理
Git學習整理
1. 前言
在實習的期間,需要頻繁使用git工具,維護原生程式碼與遠端庫程式碼的版本統一,提高開發的效率。但在使用的過程中,產生了使用不規範、理解不準確等問題,導致了提交message不規範,分支紊亂,甚至原生程式碼丟失等問題。所以有必要寫一篇有關Git的文章,整理記錄一下Git的學習過程與感悟,不過分關注具體實現方法,突出自己感覺比較重要的部分,加深一下對git瞭解。如果大家有什麼疑問困惑,發現什麼問題錯誤,歡迎一起討論。
2. Git 定義、安裝與配置
2.1 Git 定義
這部分內容不多贅述,詳細內容可以百度一下,瞭解一下GIT (分散式版本控制系統)。一言以蔽之,git是一種開源分散式的版本管理系統,可以有效、高速地處理從很小到非常大的專案版本管理。
2.2 Git 安裝與配置
我工作的環境是ubuntu18, 在linux環境下安裝git比較簡單。網上相關的資料也比較多,不是本文主要重點,不多展開:
相關參考網址
- Ubuntu18 安裝git
- Windows 安裝git
- …
2.3 Git 與 Github
我們使用Git是為了維護一個專案開發版本統一,Github 是基於Git的程式碼託管服務。我們可以通過git實現將我們本地的程式碼與github遠端的程式碼版本進行控制。
俗一點就是 ? :
開個玩笑,可以去這裡看看: 知乎Git 跟 GitHub 是什麼關係
gitee 平臺與 github 類似,前者是國內,速度會快一點吧,不過後者資源豐富的多。可以按照自己的喜好選擇。gitlab 是企業用的比較多,允許建立私有倉庫。
知道了兩者的關係,我們就可以嘗試的將本地git與各github進行連線.
立個 FLAG 後期做一個自己本地git和github連線的日誌過程吧. ?
3. Git 常用指令
git 指令不少,但常用的其實就那麼幾條,多次使用就能很快掌握。
推薦幾篇非常不錯的文章,對我的幫助很大,建議按照順序閱讀:
第三個是git的官方文件,主要是當作字典來使用,用到了可以去檢視一下。
有幾條指令我覺得還是挺重要的,記錄一下:
3.1 git add -u
git add . : 新增當前目錄中的所有檔案更改,雖然很方便,但是有很多沒有改動的檔案起始沒有必要上傳。-u可以只新增當前目錄改動檔案。
# 新增當前目錄中的改動檔案更改
git add -u
3.2 git commit --amend
commit程式碼之後,發現某個地方出錯,或者你commit message的描述有誤,但是你下次提交時不想保留上一次的記錄(別人能在git log中看到,過多的commit會不簡潔);這時候你可以使用接下來的這個命令:git commit --amend。
# --amend 更改你的最新提交訊息
git commit --amend 'new commit message'
3.3 git rebase -i
git 變基操作真的非常有用,比如說,你的分支上面有多個commit,但是每個commit其實都是很小的改動,當然可以把他們合併在一起作為一個commit提交, -i 屬性就是互動式變基。具體的內容可以看第二篇文章。
3.4 git fetch/ git merge/ git pull
這三條指令還是挺重要的,而且相互之間存在聯絡,我實習的過程中就遇到原生程式碼與遠端程式碼進度不一致,無法被merge的情況,還是挺尷尬。
首先我們看一張git 幾個指令的圖片:
我們可以看到其中:
-
fetch 指令在Remote與Repository之間,其作用是拉取遠端主機分支到本地倉庫,然後可以由使用者檢查是否合併到工作區的分支之中。這不會以任何方式影響你的本地分支:fetch 只是單純地下載新的資料而已。
-
merge 指令圖中沒有標出來,它作用的範圍是Repository與Workspace之間,是根據使用者的指示,將本地倉庫的分支與當前工作區的分支合併,會有一個新的commit。merge結束後,工作區的程式碼才和遠端主機保持一致。
-
pull 是 fetch 與 pull兩個指令的結合,意味著將遠端主機的分支拉取到工作區分支。
## fetch 部分
# 這個命令將某個遠端主機的更新全部取回本地
git fetch <遠端主機名>
# 取回特定分支的更新,可以指定分支名,注意空格
git fetch <遠端主機名> <分支名>
# 例子
# 拉取遠端origin 所有分支提交
git fetch origin
# 拉取遠端origin 的master分支
git fetch origin master
## merge 部分
# 切換到master分支,合併dev分支
git checkout master //選擇or切換到master分支
git merge dev //將dev分支合併到當前分支(master)中
A----C----E(master)
\
B---D---F(dev)
(merge 結果,注意G為新的commit)
A---C---E---G(master)
\ /
B---D---F(dev)
## pull 部分
git pull <遠端主機名> <遠端分支名>:<本地分支名>
# 將遠端主機 origin 的 master 分支拉取過來與本地的 brantest 分支合併
git pull origin master:brantest
# 遠端分支與當前分支合併,則冒號後面的部分可以省略
git pull origin master
3.5 git log 和 git revert
在使用git的過程中,肯定會有錯誤的commit,這個時候需要我們修復錯誤並進行回溯。同時 git status 和 git log 我覺得是非常有用的指令。
git status 可以檢視當前的狀態,監視未提交的檔案,建議執行指令前要status一下檢視當前狀態,避免程式碼丟失。
git log 可以檢視之前commit的資訊,有助於我們檢視當前的版本,git relog 指令可以幫助我們檢視已經執行過的所有動作的日誌。包括合併、重置、還原,基本上包含你對你的分支所做的任何修改。
## 切換到最新提交的程式碼版本
git reset HEAD
git reset HEAD -- filename # for a specific file
## 切換到最新提交之前的程式碼版本
git reset HEAD^ -- filename
git reset HEAD^ -- filename # for a specific file
## 切換回3或5次提交
git reset HEAD~3 -- filename
git reset HEAD~3 -- filename # for a specific file
git reset HEAD~5 -- filename
git reset HEAD~5 -- filename # for a specific file
## 切換回特定的提交,其中 0766c053 為提交 ID
git reset 0766c053 -- filename
git reset 0766c053 -- filename # for a specific file
## 先前的命令是所謂的軟重置。 你的程式碼已重置,但是git仍會保留其他程式碼的副本,以備你需要時使用。 另一方面,--hard 標誌告訴Git覆蓋工作目錄中的所有更改。
git reset --hard 0766c053
4. IDEA中的git工具
<待續>
參考網站
以下是一些比較有幫助的網站
相關文章
- git學習Git
- git學習之git rebaseGit
- 工作學習整理
- SSH學習整理
- git的學習Git
- Git 學習一Git
- git學習地址Git
- git學習心得Git
- Git學習1:初識GitGit
- 【git學習一】git的原理Git
- 【git學習五】git基礎之git分支Git
- GIt操作整理Git
- git命令整理Git
- Git 命令整理Git
- js 部分學習整理JS
- 學習bootstrap的整理。boot
- 小程式學習整理
- 學習資源整理
- systemstat dump學習整理
- mysql學習整理(一)MySql
- GIT學習筆記一git initGit筆記
- [Git] Git整理(四) git rebase 的使用Git
- Git簡單學習Git
- Git的初步學習Git
- Git&SourceTree學習Git
- git 學習筆錄Git
- git worktree學習Git
- git學習筆記Git筆記
- git(一):瞭解、學習、安裝gitGit
- Git學習3 --- Git命令列基本操作Git命令列
- Go 學習資料整理Go
- Masonry 原始碼學習整理原始碼
- 安卓學習資源整理安卓
- Android學習整理 - 系列Android
- Flask學習資源整理Flask
- iOS 學習資料整理iOS
- informatica 學習日記整理ORM
- swift學習資料整理Swift