git学习笔记
Git學習筆記
寫在前面
之前一直在使用git,但確實沒有好好學習過,現在決定寫個筆記,但主要以我目前用過的爲主,以及之後可能會遇到的問題,參考文檔為:
- git的學習文檔https://git-scm.com/book/zh/v2
- 廖雪峰的教程https://www.liaoxuefeng.com/wiki/896043488029600
- 阮一峰的網絡日志1http://www.ruanyifeng.com/blog/2014/06/git_remote.html
- 阮一峰的網絡日志2http://www.ruanyifeng.com/blog/2012/07/git.html
- 阮一峰的網絡日志3http://www.ruanyifeng.com/blog/2020/04/git-cherry-pick.html
- Git分支https://www.open-open.com/lib/view/open1328069889514.html
在寫這篇博客是使用的系統為windows,使用的是git for windows
版本為2.21.0.windows.1
關於學習與練習,可以訪問https://learngitbranching.js.org進行學習與練習
git初始化及其基本命令
安裝
git在linux上可以使用命令直接安裝,在windows上我使用的是git fot windows
第一步及基本命令
在安裝完git之後首先需要設置你的用戶名與郵箱
1 | git config --global user.name "用戶名" |
可以使用命令查看當前的配置信息
1 | git config --list |
也可以單獨查看某一個配置信息
1 | git config user.email |
這裏可以配置默認的文本編輯器,官方文檔說“当 Git 需要你输入信息时会调用它”,但我好像不記得我用過了,不過這裏記一下
1 | linux |
遇到了麻煩可以使用該命令來獲取幫助
1 | git --help |
如果是需要單獨命令的幫助可以使用
1 | git help <命令> |
使用git進行本地版本管理
進入到你想要使用git的文件夾中(windows可以在進入文件夾后,右擊Git Bash Here來使用命令進行管理),通過命令對初始化本地倉庫
1 | git init |
這個命令可以在空或者非空的文件夾中執行,執行過後會生成.git文件,這個就是Git来跟踪管理版本库的
可以使用下面命令對文件進行添加以及進行本地管理
1 | 添加文件到本地倉庫 |
其他説明
这里之后会陆续更新
1 | git add 文件或文件夾的名稱 |
遠程倉庫管理
遠程倉庫可以使用gitee或者github或者自己搭建的git服務器或者其他的
這裏我是用的是gitee進行測試
最簡單方便省事的方法就是在git伺服器中建立倉庫並且選擇使用Readme檔初始化倉庫,之後使用命令克隆到本地倉庫,再把需要管理的檔案複製到克隆建立的資料夾裡,之後使用命令提交到遠端倉庫
1 | 從遠程倉庫中克隆 |
當然你也可以在初始化完本地倉庫后,將之于遠端創建的空倉庫關聯起來
1 | 初始化 |
1 | git branch --set-upstream-to=origin/<branch> master |
可以使用命令查看倉庫使用的簡寫與其對應的url
1 | git remote -v |
如果遠端有更新可以使用命令同步到本地
1 | git pull |
查看提交記錄及壽説明
1 | git log |
其中commit 右邊為版本號,Author為提交人,Date為時間,下方為提交説明
可以使用命令退回到指定版本
1 | git reset --hard 版本號 |
退回上一個版本
1 | git reset --hard HEAD |
之後將會詳細的講解版本管理,這裏製作簡單介紹
git push
git push將本地倉庫的更新推送到遠程倉庫,簡單列舉常用參數
1 | git push -f | --force |
關於主機名
为了便于管理,Git要求每个远程主机都必须指定一个主机名。git remote命令就用于管理主机名
查看遠程的所有主機
1 | git remote |
查看遠程主機的網址
1 | git remote -v |
當然還可以修改、添加、刪除,不過這裏不做羅列,具體的可以查看詳細的文檔或者使用help
修改遠程倉庫地址
1 | git remote set-url 主機名 主機地址 |
仓库更新
關於仓库更新的大致如下圖所示,具體的後面會再次分析(這張圖不一定完全正確,但可以表達各個命令的意思與作用)
其中可以使用git status查看當前倉庫的狀態,例如本地有沒有更新修改,遠端有沒有新的版本提交修改(這裏的遠端倉庫更新需要git fetch才能看見,否則是看不見的)
git diff可以查看本地每個文件的修改情況
接下來介紹git fetch與git merge
其实从上图也可以看出 git fetch + git merge == git pull
那這裏有什麽不同麽,既然既然可以直接更新爲什麽還要分成兩部呢?
簡單來説分開來的好處是可以產看遠端倉庫更新了什麽,與本地的區別,再進行更新同步
git fetch
git fetch會將遠端的更新取回本地,但並不會直接合并到本地倉庫,這樣就不會直接造成版本文件的衝突,這裏可以像上圖那樣理解使用git fetch后將遠端倉庫移動至本地的遠端倉庫副本
這裏可以使用命令查看具體情況
1 | git branch -a |
之後我們可以查看遠端分支與本地的區別,我找到了以下的幾種方法,具體的方法肯定還有很多,這裏只列舉我找的(暫不考慮有多分支的情況,這裏我只嘗試的簡單的情況,後續可能會更新其他負責的情況)
通過使用
git log比較兩個分支的區別1
git log -p master.. origin/master
通過使用
git log -p可以比較每次提交或者不同分支的差異可以查看到各個增刪改的文件的差異(不同的部分)
以下也是同理(在將更新同步到本地后產生一個FETCH_HEAD)
1
git log -p FETCH_HEAD
使用
git difftool使用圖形化界面比較修改文件差異1
2git difftool origin
:qa! 退出其中左邊的是遠端的,右邊是本地的
在VSCODE中可以使用GitLens插件(簡單無腦還直觀,確實不錯,比較推薦)
之後即可點擊查看具體更新的内用以及差異
git merge
git merge是用于分支合并的命令,这里的作用其实将origin/master合并到master
具体的可以查看后买你的分支管理
版本管理
关于git的版本管理主要由幾個命令組成
1 | git log # 查看提交的历史纪录 |
git log
git log會記錄你每次提交的更新,從新到舊降序配列
其中commit 右邊為版本號,Author為提交人,Date為時間,下方為提交説明
一下為git log後面可以跟的常用參數列舉
1 | git log -<number> |
最後你可以使用gitk命令使用圖形化工具來查看提交歷史
git reflog
git reflog會記錄之前操作的歷史例如:git reset git commit git revert git pull等命令的記錄
其中 最左邊的是版號的前面7位,右邊為具體命令以及提示
注意
git log只能查看到前及以前的版本,例如:你現在提交到了第5次,當你使用git reset回到第3次后,你是無法在查看第4、5次提交的,但通過git reflog可以查看到你每次的操作歷史,可以通過reflog的版本號來進行恢復
git reset
git reset可以將版本回復到指定的狀態,通常用於撤銷之前的操作、關於常用參數主要有一下三個
1 | git reset --mixed 版本號 |
tips
關於後面的版本號,可以是git log或者是git reflog中的
版本號可以不用完全輸全,只輸前幾位也可以,但必須是從頭開始,不可以是不包含第一位的子串,當然也可以是HEAD^之類的
git revert
git revert可以將版本撤銷(有的也叫反做),可以理解為將版本回滾到某個版本,但與git reset不同的是、git revert是將撤銷后的版本作爲新的版本。例如:我現在提交到了第5次,當我使用git revert撤銷到地3次提交后、使用git log查看歷史版本會發現,實際上這裏第6次提交,只是内容與地3次相同罷了
1 | git revert 版本號 | HEAD |
tips
儅我們使用git revert HEAD時,會撤銷回上一次操作,這裏的上一次指的是git reflog中的上一次
經典的小問題
來自https://cloud.tencent.com/developer/article/1413097
簡述一下就是小白目前提交到了第6次,但是不小心使用
git reset --hard回滾到了第1次,同時有進行了一次提交一共7次,問如何把前5次恢復,同時保留剛剛提交的第7次1
2
3
4
5
6git reflog
查看歷史操作
git reset --hard 第6次提交的版本號
回滾到第6次提交的地方
git cherry-pick 第7次提交的版本號
解決衝突並添加第7次
分支管理
分支管理可以説是git一個非常非常强大的功能了,以下是主要相关命令
1 | git branch |
git branch
git branch可以列出,創建或刪除分支
1 | git branch |
git checkout
git checkout可以用于切換分支或還原工作樹文件
1 | git checkout 分支名 |
git switch
在2.27.0及往後版本中,你可以使用git switch來切換分支(我電腦中的版本太老了不支持)
1 | git switch 分支名 |
git merge
git merge可以將兩個或多個版本合并在一起
1 | git merge 分支名 |
git reset —hard
關於 分支衝突
手動解決
1
2
3
4
5<<<<<<< 當前分支名
不同的内容a
=======
不同的内容b
>>>>>>> 想要合并的分支名兩個内容選擇一個留下
使用ssh密鑰進行無密碼提交
由於使用https進行提交的話可能每次都需要輸入賬戶和密碼,所以我們可以使用ssh密鑰進行面密碼提交
1 | 生產ssh密鑰 |
若返回Hi XXX! You've successfully authenticated, but Gitee.com does not provide shell access. 内容,則表示添加成功。