git使用

git介紹與安裝

介紹

git:版本控制器,控制的對象是開發的項目程式碼。

作用:在多人開發時

  • 幫助開發者合併開發的程式碼
  • 如果出現衝突程式碼的合併,會提示後提交合併程式碼的開發者,讓其解決衝突
  • 做版本管理,找回很久以前寫的程式碼

git名詞解釋

git:是版本管理軟體,可以裝在不同作業系統平台,主要用來做版本管理。

github:全球最大的開源軟體倉庫,中國公司一般不放在github。

gitee:碼雲,中國版的github,少量公司用碼雲。

gitlab:公司內部使用的程式碼託管平台。

安裝

下載對應版本://git-scm.com/download ,一路下一步

git與svn的區別

同樣可以做版本管理和合併程式碼的軟體還有SVN。

svn :集中式管理,cs架構,客戶端需要配合服務端才能正常使用功能

image

git:分散式管理,單台機器就能進行版本管理

image

git工作流程

image

git工作時會劃分出三個區:

  • 工作區:文件存放的位置,可以新增,修改,刪除文件
  • 暫存區:用於臨時存放你的改動
  • 版本庫:安全存放數據的位置,這裡面有你提交的所有版本的數據

工作流程:在工作區修改程式碼後,先提交到暫存區,暫存區再提交到版本庫,程式碼才被版本管理,被管理的版本可以隨時回退。

各個區域可以相互操作,但工作區不能直接提交到版本庫。

git不管理空文件夾,文件夾下有文件,才會被管理

git常用命令

初始化倉庫

# 當前文件夾當做倉庫
git init
# 在當前文件夾下創建一個倉庫
git init 倉庫名

image

image

在倉庫目錄終端下 – 設置全局用戶,保存在 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

image

工作區提交到暫存區,倉庫狀態紅變綠

# 提交所有變更的文件
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

image

工作區文件回退到某個版本

# 回滾到上一個版本:
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空文件)

image

git多分支開發

git分支的概念,可以認為分支就是當前工作目錄中程式碼的一份副本。 使用分支,可以讓我們從開發主線上分離出來,以免影響開發主線,分支開發完畢後可以合併到主線,即不影響主線,又修改了程式碼。

不同分支的操作,是相互獨立的。

image

創建分支

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.創建空倉庫

image

image

2.本地初始化好倉庫

git init

3.建立remote鏈接(remote add)

git remote add origin //gitee.com/xxxx

4.提交本地倉庫到遠程(push),提交時需要輸入gitee的用戶名密碼。

git push origin master

拉取遠程倉庫

image

沒有建立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公鑰 => 添加公鑰

image

添加完成後,使用ssh連接遠程倉庫,以後就不需要使用用戶名密碼,就可以直接操作gitee了,走的是ssh鏈接,而不是https鏈接。

git remote origin [email protected]:xxxxx

image

遠程倉庫回滾

用dev分支舉例
1)本地切換到遠程要回滾的分支對應的本地分支
git checkout dev

2)回滾本地分支
git reset --hard 版本號

3)本地版本強行提交給伺服器
git push origin dev -f

衝突問題

衝突出現的情況:

  • 多人在同一分支開發出現衝突
  • 分支合併出現衝突

分支合併出現衝突

image

master分支對a.txt第一行添加了’asdasd’,dev分支對a.txt第一行添加了’bbb’,在把合併dev分支到master分支時就會提示衝突,並且a.txt內容會顯示為:

<<<<<<< HEAD
asdasd
=======
bbb
>>>>>>> dev

多人在同一分支開發出現衝突同理。

image

解決

先把衝突的地方多餘的刪除:

asdasd
bbb

分析衝突的地方該留哪一個,把不需要的刪除即可。

asdasd

git 變基和git fetch

git 變基

在 Git 中整合來自不同分支的修改主要有兩種方法:merge 以及 rebase

git merge合併時,提交記錄一併合併過去了,查看記錄時就會令人頭大;

而通過變基合併分支(git rebase),可以讓提交記錄更簡潔。

git merge合併

image

git rebase

image

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

image

image

克隆程式碼

image

image

工作區提交到暫存區(git add)

image

暫存區提交到版本庫(git commit)

image

image

查看所有分支,切換分支(右下角)

image

image

git pull 和git push

image

image

跟歷史版本比較

image

image

查看所有歷史更改

image

Tags: