GIT簡介
- 什麼是GIT
git是一個開源的分佈式版本控制系統,用於高效的管理各種大小項目和文件。
- 代碼管理工具的用途
防止代碼丟失,做備份
項目的版本管理和控制,可以通過設置節點進行跳轉
建立各自的開發環境分支,互不影響,方便合併
在多終端開發時,方便代碼的相互傳輸 - git的特點
git是開源的,多在*nix下使用,可以管理各種文件
git是分佈式的項目管理工具(svn是集中式的)
git數據管理更多樣化,分享速度快,數據安全
git 擁有更好的分支支持,方便多人協調 - git的安裝
sudo apt-get install git
GIT的使用
基本概念
- 工作區:項目所在操作目錄,實際操作項目的區域
- 暫存區: 用於記錄工作區的工作(修改)內容
- 倉庫區: 用於備份工作區的內容
- 遠程倉庫: 遠程主機上的GIT倉庫
注意: 在本地倉庫中,git總是希望工作區的內容與倉庫區保持一致,而且只有倉庫區的內容才能
和其他遠程倉庫交互。
初始配置
配置命令:git config
- 配置所有用戶:
git config --system [選項]
- 配置文件:/etc/gitconfig
- 配置當前用戶:
git config --global [選項]
- 配置文件:~/.gitconfig
- 配置當前項目:
git config [選項]
- 配置文件:project/.git/config
- 配置用戶名
將用戶名設置爲Teen
sudo git config --system user.name Teen
- 配置用戶郵箱
將郵箱設置爲[email protected]
git config --global user.email [email protected]
- 配置編譯器
配置編譯器爲pycharm
git config core.editor pycharm
- 查看配置信息
git config --list
基本命令
-
初始化倉庫
git init
意義:將某個項目目錄變爲git操作目錄,生成git本地倉庫。即該項目目錄可以使用git管理 -
查看本地倉庫狀態
git status
說明: 初始化倉庫後默認工作在master分支,當工作區與倉庫區不一致時會有提示。 -
將工作內容記錄到暫存區
git add [files..]
將 a ,b 記錄到暫存區
git add a b
將所有文件(不包含隱藏文件)記錄到暫存區
git add *
-
取消文件暫存記錄
git rm --cached [file]
-
將文件同步到本地倉庫
git commit [file] -m [message]
說明: -m表示添加一些同步信息,表達同步內容
將暫存區所有記錄同步到倉庫區
git commit -m 'add files'
-
查看commit 日誌記錄
git log
git log --pretty=oneline
-
比較工作區文件和倉庫文件差異
git diff [file]
-
將暫存區或者某個commit點文件恢復到工作區
git checkout [commit] -- [file]
–是爲了防止誤操作,checkout還有切換分支的作用 -
移動或者刪除文件
git mv [file] [path]
git rm [files]
注意: 這兩個操作會修改工作區內容,同時將操作記錄提交到暫存區。
版本控制
- 退回到上一個commit節點
git reset --hard HEAD^
注意 : 一個^表示回退1個版本,依次類推。當版本回退之後工作區會自動和當前commit版本保持一致 - 退回到指定的commit_id節點
git reset --hard [commit_id]
- 查看所有操作記錄
git reflog
注意:最上面的爲最新記錄,可以利用commit_id去往任何操作位置 - 創建標籤
標籤: 在項目的重要commit位置添加快照,保存當時的工作狀態,一般用於版本的迭代。git tag [tag_name] [commit_id] -m [message]
說明: commit_id可以不寫則默認標籤表示最新的commit_id位置,message也可以不寫,但是最好添加。
在最新的commit處添加標籤v1.0
git tag v1.0 -m '版本1'
- 查看標籤
git tag
查看標籤列表
git show [tag_name]
查看標籤詳細信息 - 去往某個標籤節點
git reset --hard [tag]
- 刪除標籤
git tag -d [tag]
保存工作區
- 保存工作區內容
git stash save [message]
說明: 將工作區未提交的修改封存,讓工作區回到修改前的狀態 - 查看工作區列表
git stash list
說明:最新保存的工作區在最上面 - 應用某個工作區
git stash apply [stash@{n}]
- 刪除工作區
git stash drop [stash@{n}]
刪除某一個工作區
git stash clear
刪除所有保存的工作區
分支管理
Git分支是由指針管理起來的,所以創建、切換、合併、刪除分支都非常快,非常適合大型項目的開發。
在分支上做開發,調試好了後再合併到主分支。那麼每個人開發模塊式都不會影響到別人。
分支使用策略:
- 主分支(默認創建的Master分支)只用來分佈重大版本(對於每個版本可以創建不同的標籤,以便於查找);
- 日常開發應該在另一條分支上完成,可以取名爲Develop;
- 多人開發時,每個人還可以分出一個自己專屬的分支,當階段性工作完成後應該合併到上級分支。
分支操作
- 查看分支情況
git branch
說明: 前面帶 * 的分支表示當前工作分支 - 創建分支
git branch [branch_name]
說明: 基於a分支創建b分支,此時b分支會擁有a分支全部內容。在創建b分支時最好保持a分支"乾淨"狀態。 - 修改分支名稱
`git branch –m 當前分支名 新的分支名
- 切換工作分支
git checkout [branch]
說明: 2,3可以同時操作,即創建並切換分支
git checkout -b [branch_name]
- 合併分支
git merge [branch]
衝突問題是合併分支過程中最爲棘手的問題
當分支合併時,原分支和以前發生了變化就會產生衝突
當合並分支時添加新的模塊(文件),這種衝突可以自動解決,只需自己決定commit操作即
可。
當合並分支時兩個分支修改了同一個文件,則需要手動解決衝突。 - 刪除分支
git branch -d [branch]
刪除分支
git branch -D [branch]
刪除沒有被合併的分支
遠程倉庫
所有操作在本地git倉庫下進行
- 添加遠程倉庫
git remote add origin https://github.com/xxxxxxxxx
- 查看連接的主機
git remote
注意: 一個git項目連接的遠程主機名不會重複 - 刪除遠程主機
git remote rm [origin]
- 將本地分支推送給遠程倉庫
將master分支推送給origin主機遠程倉庫,第一次推送分支使用-u表示與遠程對應分支建立自動關聯
git push -u origin master
- 推送代碼到遠程倉庫
git push
- 推送標籤
git push origin [tag]
推送本地標籤到遠程
git push origin --tags
推送本地所有標籤到遠程 - 推送舊的版本
git push --force origin
用於本地版本比遠程版本舊時強行推送本地版本 - 刪除遠程分支和標籤
git branch -a
查看所有分支
git push origin [:branch]
刪除遠程分支
git push origin --delete tag [tagname]
刪除遠程倉庫標籤 - 從遠程獲取代碼
獲取遠程分支代碼
git pull
將遠程分支master拉取到本地,作爲tmp分支
git fetch origin master:tmp
區別
- pull將遠程內容直接拉取到本地,並和對應分支內容進行合併
- fetch將遠程分支內容拉取到本地,但是不會和本地對應分支合併,可以自己判斷後再使用merge合併。