河南錦路路橋建設(shè)有限公司網(wǎng)站高端網(wǎng)站建設(shè)定制
前言
git是一種用于多人合作寫項(xiàng)目。詳細(xì)說明如下
文章目錄
- 前言
- 什么是版本控制?
- 什么是 Git?
- 它就屬于人工版本控制器
- 版本控制工具
- 常見版本控制工具
- 怎么工作的?
- git 文件生命周期
- 狀態(tài)
- 區(qū)域
- 安裝
- 配置
- -- global
- 檢查配置
- 創(chuàng)建倉(cāng)庫(kù)
- 工作流與基本操作
- 查看工作區(qū)的文件狀態(tài)
- 如果顯示亂碼的解決方式
- 顯示亂碼
- 終端亂碼
- 添加工作區(qū)文件到暫存區(qū)
- 創(chuàng)建版本
- 提交備注
- 修改默認(rèn)編輯器
- 單行備注
- 查看提交日志
- 修復(fù)提交
- 刪除
- 撤銷重置
- 從暫存區(qū)中撤銷到工作區(qū)
- 該命令既可以用于回退版本
- 比較
- 分支
- 查看分支
- 創(chuàng)建分支
- 切換分支
- 分支合并
- 刪除分支
- 合并記錄
- ~ 與 ^
- rebase 操作
- 合并沖突
- 標(biāo)簽
- 新建 tag
- 查看 tag
- 協(xié)同開發(fā)
- github
- SSH
- 生成 SSH 秘鑰
- 添加代理
- 添加 私鑰
- 在 github 上添加公鑰
- 測(cè)試
- git 遠(yuǎn)程
- 鏈接
- 查看遠(yuǎn)程提交
- 提交(同步)遠(yuǎn)程
- 遠(yuǎn)程分支
- 刪除分支
- 擴(kuò)展:工作流 - git work flow
- GUI 工具
首先要了解一下什么是版本控制
什么是版本控制?
版本控制是指對(duì)軟件開發(fā)過程中各種程序代碼、說明文檔等文件的變更進(jìn)行管理,它將追蹤文件變化,記錄文件的變更時(shí)間、變更內(nèi)容、甚至變更執(zhí)行人進(jìn)行記錄,同時(shí)對(duì)每一個(gè)階段性變更(不僅僅只是一個(gè)文件的變化)添加版本編號(hào),方便將來(lái)進(jìn)行查閱特定階段的變更信息,甚至是回滾
什么是 Git?
它就屬于人工版本控制器
通過人工的復(fù)制行為來(lái)保存項(xiàng)目的不同階段的內(nèi)容,添加適當(dāng)?shù)囊恍┟枋鑫淖旨右詤^(qū)分
- 繁瑣、容易出錯(cuò)
- 產(chǎn)生大量重復(fù)(冗余)數(shù)據(jù)
版本控制工具
通過程序完成上述人工版本控制行為
- 方便且功能強(qiáng)大
- 只記錄不同版本之間變化的部分
常見版本控制工具
- CVS
- SVN
- Git
- ……
怎么工作的?
首先,我們得先了解兩個(gè)重要概念
- 狀態(tài)
- 區(qū)域
git 文件生命周期
狀態(tài)
同時(shí),git 又提供了三種(也可以說是四種)不同的記錄狀態(tài)
- 已修改(modified)
- 已暫存(staged)
- 已提交(committed)
有一個(gè)特殊的狀態(tài)
- 未追蹤(Untracked)
區(qū)域
git 提供了三個(gè)不同的工作區(qū),用來(lái)存放不同的內(nèi)容
- 工作目錄
- 暫存區(qū)域
- Git 倉(cāng)庫(kù)
安裝
https://git-scm.com/
配置
當(dāng)安裝完 Git 應(yīng)該做的第一件事就是設(shè)置你的用戶名稱與郵件地址。 這樣做很重要,因?yàn)槊恳粋€(gè) Git 的提交都會(huì)使用這些信息,并且它會(huì)寫入到你的每一次提交中,不可更改
git config user.name "你的姓名"
git config user.email "你的郵箱"
– global
通過 --global
選項(xiàng)可以設(shè)置全局配置信息
git config --global user.name "你的姓名"
git config --global user.email "你的郵箱"
檢查配置
# 打印所有config
git config --list
# 打印指定config
git config user.name
創(chuàng)建倉(cāng)庫(kù)
進(jìn)入希望納入 git 版本控制的項(xiàng)目目錄,使用 git init
初始化
git init
該命令將創(chuàng)建一個(gè)名為 .git
的子目錄,這個(gè)子目錄含有你初始化的 Git 倉(cāng)庫(kù)中所有的必須文件,這個(gè)目錄也是上面我們說的三個(gè)區(qū)域之一,這個(gè)目錄也是 Git 保存數(shù)據(jù)記錄的地方,非常重要,如非必要,不要輕易改動(dòng)
工作流與基本操作
當(dāng)一個(gè)項(xiàng)目被 Git 初始化以后,只是表示我們希望通過 Git 來(lái)管理當(dāng)前的這個(gè)項(xiàng)目文件的不同時(shí)期版本記錄,但是這個(gè)時(shí)候項(xiàng)目中已存在的文件,或者以后新增的文件都是沒有進(jìn)入版本控制管理的,它們是 未追蹤(Untracked)
的狀態(tài)
查看工作區(qū)的文件狀態(tài)
git status
如果顯示亂碼的解決方式
顯示亂碼
git config --global core.quotepath false
終端亂碼
菜單 -> 設(shè)置 -> 文本 -> 本地 / 編碼
或修改配置文件
進(jìn)入windoes的cmd 然后分別輸入以下五行
git config --global core.quotepath false
git config --global gui.encoding utf-8
git config --global i18n.commit.encoding utf-8
git config --global i18n.logoutputencoding utf-8
set LESSCHARSET=utf-8
輸入完成之后再執(zhí)行命令
添加工作區(qū)文件到暫存區(qū)
git add
git add 1.txt
# 添加多個(gè)文件
git add 2.txt 3.txt
# 添加整個(gè)目錄
git add ./a
# 添加多個(gè)目錄
git add ./b ./c
# 添加所有文件
git add .
創(chuàng)建版本
git commit
將暫存區(qū)里的改動(dòng)給提交到本地 git 倉(cāng)庫(kù),也就是為這次工作(一般會(huì)把某個(gè)具有特定意義的工作作為一個(gè)版本,它可以是多個(gè)文件的變化)
- 每次提交同時(shí)會(huì)生成一個(gè) 40 位的哈希值,作為該次提交版本的唯一 id
提交備注
每次提交都需要填寫備注信息
git commit
# 會(huì)調(diào)用默認(rèn)(或自定義)的文本編輯器
修改默認(rèn)編輯器
git config core.editor notepad# 添加 vscode 編輯器 - mac
# 通過 vim 打開環(huán)境變量配置文件
vim ~/.bash_profile
# 添加環(huán)境變量
export PATH=/Applications/Visual\ Studio\ Code.app/Contents/Resources/app/bin:$PATH
# 保存退出
source ~/.bash_profile
# 測(cè)試:在終端中直接通過命令 code 調(diào)用 vscode
git config --global core.editor "code --wait"
單行備注
git commit -m 備注信息
查看提交日志
git log
// 完整格式
git log
// 簡(jiǎn)要格式(單行)
git log --oneline
修復(fù)提交
git commit --amend
修復(fù)(替換上一次)提交,在不增加一個(gè)新的提交版本的情況下將新修改的代碼追加到前一次的提交中
git commit --amend -m 提交
刪除
git rm
# 從 git 倉(cāng)庫(kù)與工作區(qū)中刪除指定文件
git rm 文件# 只刪除 git 倉(cāng)庫(kù)中的文件
git rm --cached 文件# rm 以后,需要 commit 這次操作,否則 rm 將保留在暫存區(qū)
git commit -m 修正
撤銷重置
git reset
從暫存區(qū)中撤銷到工作區(qū)
// 從暫存區(qū)中撤銷一個(gè)指定文件
git reset HEAD 文件名稱
// 從暫存區(qū)中國(guó)年撤銷所有文件
git reset HEAD .
該命令既可以用于回退版本
# 回退到指定的 commitID 版本
git reset --hard commitID
比較
# 比較 工作區(qū)和暫存區(qū)
git diff 文件
# 比較 暫存區(qū)和倉(cāng)庫(kù)
git diff --cached [commitId] 文件
# 比較 工作區(qū)和倉(cāng)庫(kù)
git diff commitId filename
# 比較 倉(cāng)庫(kù)不同版本
git diff commitId1 commitId2
分支
我們的開發(fā)就像是游戲的任務(wù),默認(rèn)是在主線(master)上進(jìn)行開發(fā)的。許多時(shí)候,還有各種支線任務(wù),git 支持我們創(chuàng)建分支來(lái)進(jìn)行項(xiàng)目開發(fā)
查看分支
git branch
創(chuàng)建分支
git branch 分支名稱
切換分支
git checkout 分支名稱
# 也可以使用 checkout -b 來(lái)新建分支
git checkout -b 分支名稱
分支合并
# B 合并到 A,需要切換到 A 分支
git merge 被合并分支# 查看已經(jīng)合并的分支
git branch --merged
# 查看未合并的分支
git branch --no-merged
刪除分支
# 如果分支為未合并狀態(tài),則不允許刪除
git branch -d 分支名稱
# 強(qiáng)制刪除
git branch -D 分支名稱
合并記錄
rebase
# 合并 HEAD 前兩個(gè)祖先記錄
git rebase -i HEAD~2
~ 與 ^
~ : 縱向
^ : 橫向
rebase 操作
# p, pick = use commit => 使用
# r, reword = use commit, but edit the commit message => 使用,但重新編輯說明
# e, edit = use commit, but stop for amending => 使用
# s, squash = use commit, but meld into previous commit => 使用,但合并上一次
# f, fixup = like "squash", but discard this commit's log message => 就像 squash 那樣,但會(huì)拋棄這個(gè) Commit 的 Commit message
# x, exec = run command (the rest of the line) using shell => 執(zhí)行腳本
# d, drop = remove commit => 移除
git rebase -i HEAD~3
# 彈出編輯器,根據(jù)需要的進(jìn)行修改,然后保存
# 如果為 r,s 則會(huì)再次彈出編輯器,修改新的 commit message,修改之后保存
如果出現(xiàn)一些問題,可以通過
git rebase --edit-todo
和git rebase --continue
進(jìn)行重新編輯保存
合并沖突
有的時(shí)候,不同的分支可能會(huì)對(duì)同一個(gè)文件內(nèi)容和位置上進(jìn)行操作,這樣在合并的過程中就會(huì)產(chǎn)生沖突
- 查看沖突文件
- 修復(fù)沖突內(nèi)容
- 提交
標(biāo)簽
有的時(shí)候,我們希望給某一個(gè)特定的歷史提交打上一些標(biāo)簽
新建 tag
git tag -a v1.0.0 HEAD/commitId
查看 tag
git tag
協(xié)同開發(fā)
以上所有的操作都是建立在本地的,如果我們希望進(jìn)行團(tuán)隊(duì)協(xié)同開發(fā),那么這個(gè)時(shí)候,我們就需要把 git 倉(cāng)庫(kù)信息與團(tuán)隊(duì)中的所有人進(jìn)行共享
- 分布式 - 中心化與去中心化
github
首先注冊(cè)一個(gè)賬號(hào)
使用 ssh 鏈接
SSH
https://help.github.com/cn/articles/connecting-to-github-with-ssh
https://help.github.com/cn/articles/generating-a-new-ssh-key-and-adding-it-to-the-ssh-agent
生成 SSH 秘鑰
ssh-keygen -t rsa -C "zmouse@miaov.com"
添加代理
使用 ssh-add
代理,如果沒有啟動(dòng),可以手動(dòng)啟動(dòng)
eval $(ssh-agent -s)
添加 私鑰
ssh-add 私鑰路徑
在 github 上添加公鑰
個(gè)人中心 -> 設(shè)置 -> ssh -> 添加
測(cè)試
ssh -T git@github.com
git 遠(yuǎn)程
鏈接
git remote add origin git@github.com:miaov-zmouse/kkb-test.git
查看遠(yuǎn)程提交
git remote -v
提交(同步)遠(yuǎn)程
同步本地倉(cāng)庫(kù)到遠(yuǎn)程
git push origin -u master
# -u 簡(jiǎn)化后續(xù)操作
git push origin master
遠(yuǎn)程分支
# 提交到遠(yuǎn)程(分支)
git push origin [本地分支名稱]:[遠(yuǎn)程分支名稱]# 遠(yuǎn)程先創(chuàng)建好分支然后拉取到本地
git checkout -b [本地分支名稱] origin/[遠(yuǎn)程分支名稱]# 拉取遠(yuǎn)程分支到本地
git pull origin [遠(yuǎn)程分支名稱]:[本地分支名稱]# 查看遠(yuǎn)程倉(cāng)庫(kù)
git remote show origin# 查看本地分支
git branch# 查看遠(yuǎn)程分支
git branch -r# 查看所有分支
git branch -a# 刪除本地分支
git branch -d [本地分支名稱]# 刪除遠(yuǎn)程分支
git push origin --delete [遠(yuǎn)程分支名稱]
# or
git push origin :[遠(yuǎn)程分支名稱]# 設(shè)置默認(rèn)提交分支
git branch --set-upstream-to=origin/[遠(yuǎn)程分支名稱] [本地分支名稱]
刪除分支
git remote remove origin
擴(kuò)展:工作流 - git work flow
GUI 工具
https://git-scm.com/download/gui/win
- Sourcetree
- other editor
總結(jié) :
總結(jié)來(lái)說 git 分為倆種方式 一種是cmd 輸入指令就行,還有一種就是在編譯器里面下載插件 《Git History》 使用圖形化工具。
git 完全可以自學(xué)。