Git是目前世界上最先進的分佈式版本控制系統,這裏有兩個名詞:分佈式、版本控制。
牆裂推薦 廖雪峯的 Git 教程。這篇文章也算是看了 廖老師的教程後寫的一點筆記。
版本控制:顧名思義,就是通過各個版本的內容來對文件進行管理,可以通過查看各個版本可以知道修改人和修改時間。
之前也一直在使用 Git ,但是使用的基本都是備份的功能,使用的也是一些個人開發(非團隊協作)常見的命令,如:
git init
git add .
git commit -m "xxx"
git push
git pull
git status
git checkout -b dev
git diff
當然如果只是個人使用,知道以上命令就可以使用好 Git 了。
在大型項目中肯定會有多人協作的情況,所以我們需要了解 Git 在多人協作時的一些操作。
在多人協作中經常遇到的問題就是多個人修改同一個文件的衝突,解決辦法就是先處理衝突,看是要保留我們的修改還是保留其他人的修改,或者是合併二者的修改。
在開發中常見的場景還有:
- 修復 Bug
- 添加新功能
- 打 Tag
- 版本回退
- 撤銷修改
- 刪除文件
在開始介紹以上幾個功能的命令之前先了解一下 Git 中 工作區和暫緩區 的概念。
暫緩區:git add <file>
這個命令是將文件添加到 暫緩區,git commit -m "xxx"
這是將暫緩區的內容提交到分支。
工作區:就是我們在實時編輯的文件,在 git commit -m "xxx"
之後沒做任何修改,那麼工作區就是乾淨的。
修復 Bug
在開發中經常還在寫代碼,突然測試跟你說有 Bug 了需要緊急修改,那麼這時候需要用上 Git 的 修復 Bug 的版本控制了。
- 保存當前的修改。
git stash
- 首先確定出現 Bug 的分支,從那個分支創建出一個修復 Bug 的分支。
切換分子:git checkout 分支名,創建 Bug 分支:git checkout -b issue-101
- 在 Bug 分支上修復問題,合併分支,刪除 Bug 分支。
修復問題並提交:git add <file> , git commit -m "xxx", 切回到出 Bug 的分支:git checkout 分支名,合併分支:git merge --no-ff -m "merged bug fix 101" issue-101
- 回到保存代碼的分支上繼續擼碼。
git checkout 保存代碼的分支,查看保存的列表:git stash list,取出保存的代碼:git stash pop, 取出某個保存的代碼:git stash apply stash@{id}
添加新功能
和修復 Bug 分支操作類似
- 保存當前的修改
- 找到要添加新功能的分支版本,創建出一個 feature 分支。
- 完成新功能,合併分支,刪除分支。
如果在合併之前想放棄新功能可以使用:git branch -D feature-vulcan 強行刪除分支
- 回到保存代碼的分支上繼續擼碼。
打 Tag
tag
就是一個讓人容易記住的有意義的名字,它跟某個commit
綁在一起。例如版本發佈時需要指定某個時刻提交的版本進行打包,需要根據commit id
去查找,一大串的英文數字中找到一串commit id
看着不是很爽,所以我們在commit
的時候加上tag
名字後,需要打包某一個時刻提交的版本,直接搜索tag
名稱即可找到commit id
,最後通過commit id
打包。
- 命令
git tag <tagname>
用於新建一個標籤,默認爲HEAD
,也可以指定一個commit id
; - 命令
git tag -a <tagname> -m "blablabla..."
可以指定標籤信息; - 命令
git tag
可以查看所有標籤。 - 命令
git show <tagname>
可以看到說明文字
版本回退
顧名思義就是撤銷修改的意思,就像吃了後悔藥的那種效果。前提是沒有提交到遠程倉庫
- 回退上一個版本。
git reset --hard HEAD^
- 回退上上一個版本。
git reset --hard HEAD^^
- 回退到某個版本。
git reset --hard <填寫 commitId 前幾位即可>
回退到某個版本需要 commit id
,可以通過 git log
命令查看具體的commit id
,如果嫌棄git log
打印的內容太雜,可以使用 git log --pretty=oneline
查看 commit id
如果已經回退後的版本又想恢復,但是找不到commit id
,可以通過git reflog
來查找commit id
,它的作用是用來記錄你的每一次命令。
撤銷修改
如果還未添加到暫緩區,也就是所做的修改還沒有做git add
操作
可以使用命令git checkout -- file
可以丟棄工作區的修改。
如果已經添加到暫緩區但是還沒提交,也就是做了git add
但是還沒做git commit -m "xxx"
,可以使用命令git reset HEAD <file>
將暫存區的修改撤銷掉(unstage),重新放回工作區
刪除文件
包含真的要刪除文件以及誤刪文件。
真的要刪除文件
git rm <file>
git commit -m "remove file"
誤刪文件,想要恢復(和撤銷修改類似)
git checkout -- file