目錄
1.忽略特殊文件
1.1.那如何配置我們需要忽略的文件的呢?
1.2.如何檢驗效果?
2.給命令配置別名
3.基本操作之版本回退
3.1.使用場景:
3.2.使用方法:
4.撤銷修改
情況一:對于工作區的代碼,還沒有 add?
情況二:已經 add ,但沒有 commit?
情況三:已經add,并且也commit了
表格總結:
5.基本操作之刪除文件
6.標簽管理
6.1.理解標簽
6.2.創建標簽
6.3.操作標簽
7.圖形化的方式展示分支和合并的歷史
1.忽略特殊文件
在日常開發中,我們有些文件不想或者不應該提交到遠端,比如保存了數據庫密碼的配置文件,那怎么讓Git知道呢?在Git工作區的根目錄下創建?個特殊的 .gitignore 文件,然后把要忽略的文件名填進去,Git就會自動忽略這些文件了。
不需要從頭寫 .gitignore 文件,gitee在創建倉庫時就可以為我們生成,不過需要我們主動勾選?下:
1.1.那如何配置我們需要忽略的文件的呢?
我們只需要vim打開.gitignore文件,將需要忽略的文件后綴書寫進去即可。
格式為:
*后綴名
例如我們想忽略以?.so 和?.ini 結尾所有文件, .gitignore 的內容如下:?
# My configurations:
*.ini
*.so
當我們想要把一些確定的文件不按照.gitignore規則,
把指定文件排除在 .gitignore 規則外的寫法就是 ! +文件名,所以,只需把例外文件添加進去即可。
# 排除所有.開頭的隱藏?件:
.*
# 不排除.gitignore
!.gitignore
1.2.如何檢驗效果?
檢驗 .gitignore 的標準就是 git status 命令是不是說 working tree clean 。我們發現Git并沒有提示在工作區中有文件新增,那么?.gitignore 忽略特定文件就生效了!
git check-ignore命令
你發現,可能是 .gitignore 寫得有問題,需要找出來到底哪個規則寫錯了,比如說a.so文件是要被添加的,可以用?git check-ignore 命令檢查:
git check-ignore -v a.so
.gitignore:3:*.so a.so
Git會告訴我們, .gitignore 的第3行規則忽略了該文件,于是我們就可以知道應該修訂哪個規則。
2.給命令配置別名
在我們使用Git期間,有些命令敲的時候著實讓人頭疼(太長了。。),幸運的是,git支持對命令進行簡化!
舉個例子,將 git status 簡化為 git st ,對應的命令為:
git config --global alias.st status
--global 參數是全局參數,也就是這些命令在這臺電腦的所有Git倉庫下都有用。如果不加,那只針對當前的倉庫起作用。
3.基本操作之版本回退
3.1.使用場景:
之前我們也提到,過Git 能夠管理文件的歷史版本,這也是版本控制器重要的能?。如果有?天你發現之前的?作做的出現了很?的問題,需要在某個特定的歷史版本重新開始,這個時候,就需要版本 回退的功能了。
3.2.使用方法:
執? git reset 命令?于回退版本,可以指定退回某?次提交的版本。要解釋?下“回退”本質是要將版本庫中的內容進?回退,?作區或暫存區是否回退由命令參數決定:
git reset 命令語法格式為: git reset [--soft | --mixed | --hard] [HEAD]?
- --mixed 為默認選項,使?時可以不?帶該參數。該參數將暫存區的內容退回為指定提交版本內 容,?作區?件保持不變。
- ?--soft 參數對于?作區和暫存區的內容都不變,只是將版本庫回退到某個指定版本。
- ?--hard 參數將暫存區與?作區都退回到指定版本。切記?作區有未提交的代碼時不要?這個命 令,因為?作區會回滾,你沒有提交的代碼就再也找不回了,所以使?該參數前?定要慎重。
- HEAD 說明: 可直接寫成commit id,表示指定退回的版本
- HEAD 表示當前版本
- HEAD^ 上一個版本
- HEAD^^ 上上一個版本。以此類推...
可以使用 ~數字表示
- HEAD~0 表示當前版本:
- HEAD~1 上一個版本
- HEAD^2 上上一個版本以此類推...
查看歷史提交指令?
git log --pretty=oneline
可以看到之前版本的commit id用來版本回退。
例如我們可以用下面的指令來回歸到version2版本
git log --pretty=oneline
d95c13ffc878a55a25a3d04e22abfc7d2e3e1383 (HEAD -> master) add version3
14c12c32464d6ead7159f5c24e786ce450c899dd add version2
cff9d1e019333318156f8c7d356a78c9e49a6e7b add version1
...git reset --hard
14c12c32464d6ead7159f5c24e786ce450c899dd
到這里一般回退功能就演示完了,但現在如果我后悔了,想再回到 version3怎么辦?我們可以繼續使用 git reset 命令,回退到 version 3 版本,但我們必須要拿到 version 3 的 commit id 去指定回退的版本!
但我們看到了 git log并不能打印出 version 3的 commit id ,運氣好的話我們可以從終端上去找找之前的記錄,運氣不好的話 commit id 已經被我們搞丟了。
Git 還提供了一個 git reflog 命令能補救一下,該命令用來記錄本地的每一次命令。
git reflog
14c12c3 (HEAD -> master) HEAD@{0}: reset: moving to
14c12c32464d6ead7159f5c24e786ce450c899dd
d95c13f HEAD@{1}: commit: add version3
14c12c3 (HEAD -> master) HEAD@{2}: commit: add version2
cff9d1e HEAD@{3}: commit: add version1
594da695 HEAD@{4}: commit: add modify ReadMe file
23807c5 HEAD@{5}: commit: add 3 files
c614289 HEAD@{6}: commit (initial): commit my first file
這樣,你就可以很方便的找到你的所有操作記錄了,但 d95c13f這個是啥東西?這個是 version3 的 commit id 的部分。沒錯,Git 版本回退的時候,也可以使用部分 commit id 來代表目標版本。
可往往是理想很豐滿,現實很骨感。在實際開發中,由于長時間的開發了,導致 commit id 早就找
不到了,可突然某一天,我又想回退到 version3,那該如何操作呢?貌似現在不可能了。。。
4.撤銷修改
如果我們在我們的工作區寫了很長時間代碼,越寫越寫不下去,覺得自己寫的實在是垃圾,想恢復到 上?個版本。
情況一:對于工作區的代碼,還沒有 add?
我們可以使用 git checkout -- [file]命令讓工作區的文件回到最近一次 add 或 commit 時的狀態。
要注意 git checkout -- [file]命令中--的很重要,切記不要省略,一旦省略,該命令就變為其他意思了!
情況二:已經 add ,但沒有 commit?
讓我們來回憶一下學過的 git reset 回退命令,該命令如果使用 --mixed 參數,可以將暫存區
的內容退回為指定的版本內容,但工作區文件保持不變。那我們就可以回退下暫存區的內容了!!!
注意--mixed參數是默認參數,是可以省略的。
# --mixed 是默認參數,使?時可以省略git reset HEAD ReadMe
情況三:已經add,并且也commit了
不要擔心,我們可以 git reset --hard HEAD^ 回退到上一個版本!
不過,這是有前提的,就是你還沒有把自己的本地版本庫推送到遠程。還記得Git是分布式版本控制系統嗎?我們后面會講到遠程版本庫,一旦你推送到遠程版本庫,你就真的慘了……
表格總結:
5.基本操作之刪除文件
在Git中,刪除也是?個修改操作,我們實戰?下,如果要刪除 file5文件,怎么搞呢?如果你這樣做了:
ls
file1 file2 file3 file4 file5 ReadMe
rm file5
但這樣直接刪除是沒有?的,反而徒增煩惱, git status 命令會?刻告訴你哪些文件被刪除了
此時,工作區和版本庫就不一致了,要刪文件,目前除了要刪工作區的文件,還要清除版本庫的文
件。
一般走到這里,有兩種可能:
- 確實要從版本庫中刪除該文件
- 不小心刪錯了
對第二種情況,很明顯誤刪,需要使用 git 來進行恢復,很簡單,我們剛學過(刪除也是修改):
git checkout -- file5
直接使用這個指令即可。
對于第?種情況,很明顯是沒有刪完,我們只刪除了?作區的?件。這時就需要使?git rm 將文件從暫存區和?作區中刪除,并且commit :
git rm file5
git commit -m"deleted file5"
git rm file5
rm 'file5'
git status
On branch master
Changes to be committed:(use "git restore --staged <file>..." to unstage)deleted: file5
git commit -m"deleted file5"
[master 5476bde] deleted file51 file changed, 0 insertions(+), 0 deletions(-)delete mode 100644 file5
git status
On branch master
nothing to commit, working tree clean
現在,文件就從版本庫中被刪除了
6.標簽管理
6.1.理解標簽
標簽 tag ,可以簡單的理解為是對某次 commit 的一個標識,相當于起了一個別名。例如,在項目
發布某個版本的時候,針對最后一次 commit 起一個 v1.0 這樣的標簽來標識里程碑的意義。
這有什么用呢?相較于難以記住的 commit id ,tag 很好的解決這個問題,因為 tag 一定要給
個讓人容易記住,且有意義的名字。當我們需要回退到某個重要版本時,直接使用標簽就能很快定位到。
6.2.創建標簽
在Git中打標簽非常簡單,首先,切換到需要打標簽的分支上
然后,敲命令 git tag [name] 就可以打?個新標簽:
可以?命令 git tag 查看所有標簽:
默認標簽是打在最新提交的 commit 上的。那如何在指定的commit上打標簽呢??法是找到歷史提 交的commit id,然后打上就可以了,?例如下:
# 歷史記錄
hyb@139-159-150-152:~/git_teaching$ git log --pretty=oneline --abbrev-commit
97811ab (HEAD -> master, tag: v1.0, origin/master, origin/HEAD) add .gitignore
60e6b0a update README.md.
7ce3183 create file.txt
c6ce3f0 Initial commit
# 對 Initial commit 這次提交打標簽
hyb@139-159-150-152:~/git_teaching$ git tag v0.9 c6ce3f0
hyb@139-159-150-152:~/git_teaching$ git tag
v0.9
v1.0
注意,標簽不是按時間順序列出,而是按字母排序的。
可以用 git show [tagname]查看標簽信息。
6.3.操作標簽
如果標簽打錯了,也可以刪除
git tag -d [tagname]
hyb@139-159-150-152:~/git_teaching$ git tag
v0.9
v1.0
hyb@139-159-150-152:~/git_teaching$ git tag -d v0.9
Deleted tag 'v0.9' (was c6ce3f0)
hyb@139-159-150-152:~/git_teaching$ git tag
v1.0
因為創建的標簽都只存儲在本地,不會自動推送到遠程。所以,打錯的標簽可以在本地安全刪除。
如果要推送某個標簽到遠程,使用命令 git push origin <tagname>
如果標簽已經推送到遠程,要刪除遠程標簽就?煩?點,先從本地刪除;然后,從遠程刪除。刪除命令也是push,但是格式如下:
hyb@139-159-150-152:~/git_teaching$ git tag
v1.0
hyb@139-159-150-152:~/git_teaching$ git tag -d v1.0
Deleted tag 'v1.0' (was 97811ab)
hyb@139-159-150-152:~/git_teaching$ git push origin :refs/tags/v1.0
remote: Powered by GITEE.COM [GNK-6.4]
To gitee.com:hyb91/git_teaching.git- [deleted] v1.0
7.圖形化的方式展示分支和合并的歷史
git log --graph --abbrev-commit
綠色代表dev分支上的,紅色代表master分支,注意分場景使用(顏色是隨機的,下次可能綠色就是主分支)