git使用
git介紹與安裝
介紹
git:版本控制器,控制的對象是開發的項目程式碼。
作用:在多人開發時
- 幫助開發者合併開發的程式碼
- 如果出現衝突程式碼的合併,會提示後提交合併程式碼的開發者,讓其解決衝突
- 做版本管理,找回很久以前寫的程式碼
git名詞解釋
git:是版本管理軟體,可以裝在不同作業系統平台,主要用來做版本管理。
github:全球最大的開源軟體倉庫,中國公司一般不放在github。
gitee:碼雲,中國版的github,少量公司用碼雲。
gitlab:公司內部使用的程式碼託管平台。
安裝
下載對應版本://git-scm.com/download ,一路下一步
git與svn的區別
同樣可以做版本管理和合併程式碼的軟體還有SVN。
svn :集中式管理,cs架構,客戶端需要配合服務端才能正常使用功能
git:分散式管理,單台機器就能進行版本管理
git工作流程
git工作時會劃分出三個區:
- 工作區:文件存放的位置,可以新增,修改,刪除文件
- 暫存區:用於臨時存放你的改動
- 版本庫:安全存放數據的位置,這裡面有你提交的所有版本的數據
工作流程:在工作區修改程式碼後,先提交到暫存區,暫存區再提交到版本庫,程式碼才被版本管理,被管理的版本可以隨時回退。
各個區域可以相互操作,但工作區不能直接提交到版本庫。
git不管理空文件夾,文件夾下有文件,才會被管理
git常用命令
初始化倉庫
# 當前文件夾當做倉庫
git init
# 在當前文件夾下創建一個倉庫
git init 倉庫名
在倉庫目錄終端下 – 設置全局用戶,保存在 C:\Users\用戶文件夾\.gitconfig文件中,所有倉庫下都可以使用
git config --global user.name '用戶名'
git config --global user.email '用戶郵箱'
在倉庫目錄終端下 – 設置局部用戶,保存在當前倉庫\.git\config文件中(有局部用戶優先使用局部用戶)
git config user.name '用戶名'
git config user.email '用戶郵箱'
查看倉庫狀態,當倉庫中有文件增加、刪除、修改,都可以在倉庫狀態中查看。
# 查看倉庫狀態
git status
# 倉庫狀態的簡約顯示
git status -s
工作區提交到暫存區,倉庫狀態紅變綠
# 提交所有變更的文件
git add .
# 提交指定變更文件
git add 文件名
暫存區所有內容提交到版本庫,需要設置用戶,倉庫狀態綠變無
git commit -m '注釋內容'
查看版本管理資訊,每次更改文件後提交到版本庫就是一個版本
# 顯示誰在什麼時間提交的,版本號是多少
git log
# 簡略顯示版本資訊
git reflog
# 查看時間點之前|之後的日誌:
git log --after 2018-6-1
git log --before 2018-6-1
git reflog --after 2018-6-1
git reflog --before 2018-6-1
# 查看指定開發者日誌
git log --author author_name
git reflog --author author_name
工作區文件回退到某個版本
# 回滾到上一個版本:
git reset --hard HEAD^
git reset --hard HEAD~
# 回滾到上三個版本:
git reset --hard HEAD^^^
git reset --hard HEAD~3
# 回滾到指定版本號的版本:
git reset --hard 版本號
暫存區拉回到工作區,倉庫狀態綠變紅
git reset HEAD
把當前工作區的更改(不包含新增,包含修改和刪除),回退回去
git checkout .
git過濾文件
在倉庫目錄下,新建一個 .gitignore 文件,文件中寫目錄或者文件或者模糊匹配,它可以完成對這些文件的忽略。
.gitignore內容:
- 文件或文件夾名:代表所有目錄下的同名文件或文件夾都被過濾
- /文件或文件夾名:代表倉庫根目錄下的文件或文件夾被過濾
eg:
a.txt:項目中所有a.txt文件和文件夾都會被過濾
/a.txt:項目中只有根目錄下a.txt文件和文件夾會被過濾
/b/a.txt:項目中只有根目錄下的b文件夾下的a.txt文件和文件夾會被過濾
*x*:名字中有一個x的都會被過濾(*代表0~n個任意字元)
空文件夾不會被提交,空包會被提交,包可以被提交(包中有一個init空文件)
git多分支開發
git分支的概念,可以認為分支就是當前工作目錄中程式碼的一份副本。 使用分支,可以讓我們從開發主線上分離出來,以免影響開發主線,分支開發完畢後可以合併到主線,即不影響主線,又修改了程式碼。
不同分支的操作,是相互獨立的。
創建分支
git branch 分支名
切換分支
git checkout 分支名
查看分支
git branch
刪除分支
git branch -d 分支名
合併分支,假設當前在master分支執行了git merge dev,即把dev分支合併到了master分支。
git merge 分支名
git遠程倉庫
上面都是在本地做程式碼管理,如果需要協同開發,把多人的程式碼合併到一起,需要有一個遠程倉庫,都把程式碼提交到遠程倉庫,遠程倉庫幫我們做合併。
github、gitee、gitlab 都是遠程倉庫。
1)你作為項目倉庫初始化人員:
線上要創建空倉庫 => 本地初始化好倉庫 => 建立remote鏈接(remote add) => 提交本地倉庫到遠程(push)
2)你作為項目後期開發人員:
遠程項目倉庫已經創建成功 => 複製遠程倉庫到本地(clone) => 進入倉庫就可以進行接下來的開發
remote源操作
# 查看倉庫已配置的遠程源
git remote
git remote -v
# 刪除遠程源
git remote remove 源名
# 添加遠程源
git remote add 源名 源地址
# 提交程式碼到遠程源
git push 源名 分支名
# 從遠程源拉取程式碼
git pull 源名 分支名
# 克隆遠程源
git clone 遠程源地址
遠程倉庫初始化
1.創建空倉庫
2.本地初始化好倉庫
git init
3.建立remote鏈接(remote add)
git remote add origin //gitee.com/xxxx
4.提交本地倉庫到遠程(push),提交時需要輸入gitee的用戶名密碼。
git push origin master
拉取遠程倉庫
沒有建立remote鏈接
倉庫克隆,在當前文件夾內生成。
git clone //gitee.com/xxxx
建立了remote鏈接
git pull 源名 分支名
ssh協議連接遠程源
gitee官方創建公鑰私鑰:生成/添加SSH公鑰 – Gitee.com
生成公鑰:郵箱可以任意填寫
ssh-keygen -t rsa -C "*@*.com"
查看公鑰:
C:\Users\Administrator\.ssh\id_rsa.pub
碼雲線上添加公鑰:設置 => SSH公鑰 => 添加公鑰
添加完成後,使用ssh連接遠程倉庫,以後就不需要使用用戶名密碼,就可以直接操作gitee了,走的是ssh鏈接,而不是https鏈接。
git remote origin [email protected]:xxxxx
遠程倉庫回滾
用dev分支舉例
1)本地切換到遠程要回滾的分支對應的本地分支
git checkout dev
2)回滾本地分支
git reset --hard 版本號
3)本地版本強行提交給伺服器
git push origin dev -f
衝突問題
衝突出現的情況:
- 多人在同一分支開發出現衝突
- 分支合併出現衝突
分支合併出現衝突
master分支對a.txt第一行添加了’asdasd’,dev分支對a.txt第一行添加了’bbb’,在把合併dev分支到master分支時就會提示衝突,並且a.txt內容會顯示為:
<<<<<<< HEAD
asdasd
=======
bbb
>>>>>>> dev
多人在同一分支開發出現衝突同理。
解決
先把衝突的地方多餘的刪除:
asdasd
bbb
分析衝突的地方該留哪一個,把不需要的刪除即可。
asdasd
git 變基和git fetch
git 變基
在 Git 中整合來自不同分支的修改主要有兩種方法:merge
以及 rebase
。
git merge合併時,提交記錄一併合併過去了,查看記錄時就會令人頭大;
而通過變基合併分支(git rebase),可以讓提交記錄更簡潔。
git merge合併
git rebase
git fetch
git fetch與git pull類似,首先在作用上他們的功能是大致相同的,都是起到了更新程式碼的作用。
- git pull:從遠程獲取最新版本並merge到本地,會自動合併或修改當前的工作。
- git fetch:會將數據拉取到本地倉庫,不會自動合併或修改當前的工作
git pull = git fetch + git merge
JetBrains(pycharm)操作git
JetBrains系列軟體其實可以作為git的圖形化客戶端,這裡拿pycharm舉例。
pycharm配置git
克隆程式碼
工作區提交到暫存區(git add)
暫存區提交到版本庫(git commit)
查看所有分支,切換分支(右下角)
git pull 和git push
跟歷史版本比較
查看所有歷史更改