開源的分佈式版本控制系統, 用於高效的管理大小項目和文件git
開源, 多在 *nix 下使用緩存
分佈式管理工具 (svn 集中式)安全
每臺主機都有完整代碼, 代碼的交互是增量更新服務器
擁有更好的分支支持, 方便多人協調工做網絡
雖然 分佈式的git 不須要依靠中央節點app
可是 實際工做仍是會定義中央主機, 工做模式模擬的是 集中式管理分佈式
sudo apt-get install git
工做區 項目所在操做目錄, 項目操做區域svn
暫存區 用於記錄工做區的工做(修改)內容工具
倉庫 將記錄內容備份fetch
遠程倉庫 遠程主機上的 git 倉庫
git config
git config --system [選項]
配置文件位置: /etc/gitconfig
git config --global [選項]
配置文件: ~/.gitconfig
git config [選項]
配置文件: 項目目錄/.git/config
* 要求必須在項目下執行 * 順序 項目>當前用戶>全部用戶
sudo git config --system user.name yangtuo
執行位置 任何位置
實例
tarena@tedu:~$ sudo git config --system user.name yangtuo [sudo] tarena 的密碼: tarena@tedu:~$ tarena@tedu:~$ cat /etc/gitconfig [user] name = yangtuo tarena@tedu:~$
sudo git config --global user.email 745206110@qq.com
實例
tarena@tedu:~$ sudo git config --global user.email 745206110@qq.com tarena@tedu:~$ cat ~/.gitconfig [user] email = 745206110@qq.com tarena@tedu:~$
git config --list
實例
tarena@tedu:~/git$ git config --list user.name=yangtuo user.email=745206110@qq.com core.repositoryformatversion=0 core.filemode=true core.bare=false core.logallrefupdates=true core.editor=vscode tarena@tedu:~/git$
將某個項目目錄, 變爲 git 操做目錄, 生成 git 本地倉庫
該目錄便可使用 git 進行管理
git init
實例
tarena@tedu:~/git$ git init 初始化空的 Git 倉庫於 /home/tarena/git/.git/ tarena@tedu:~/git$
git status
初始默認分支爲 master
當工做區和倉庫 不一致的時候, 會有所提示
git add files
git add file1, file2
git add .
ps
git add . 2.0 版本以後就能夠支持全部的操做, 固然也包括刪除文件也能夠提交
以前 1.0 版本 . 的操做是沒法提交刪除文件操做的
git commit -m 'add some files'
每次同步都須要添加 [msg] 同步信息 格式爲字符串
commit 操做只能同步暫存區已經記錄的內容
git commit -m [msg]
一個是詳細查看, 一個是簡單查看
git log
git log --pretty=oneline
實例
tarena@tedu:~/git$ git log commit 3f8c95ebeb0998f9f4de793ceb856827a5da27fc Author: yangtuo <745206110@qq.com> Date: Thu Mar 7 16:17:36 2019 +0800
新添加了一個電子詞典項目
實例
tarena@tedu:~/git$ git log --pretty=oneline
3f8c95ebeb0998f9f4de793ceb856827a5da27fc 新添加了一個電子詞典項目
5f8a36d92345fc685381418125a69e63d9163df3 所有刪掉
9bcdb97cae7082b59b532c817b1e08e8cde3ec9a add some files
tarena@tedu:~/git$
用於比較工做區文件和倉庫文件差別
git diff [file]
git checkout -- file
git checkout file
git mv [file] [path]
git rm [file]
git reset --hard HEAD^
HEAD 是 commit 指針
一個 ^ 表明後退一個
一般不會寫太多, 最多兩個三個而已
git reset --hard [commit_id]
commit_id 不須要全寫, 前7位就夠了
去往指定的節點後, 在此節點後的全部版本會沒法查看
能夠經過 git reflog 來所有查看
git reflog
利用該操做,能夠去往任意的歷史位置
git tag[名稱] -m [message]
標籤 在工做的重要位置添加的快照, 保存當時的工做狀態
通常用於版本迭代等
注意 message 能夠不寫, 可是最好添加
git tag
git tag [tag_name] [commit_id] -m [message]
git show [tag]
git tag -d [tag_name]
git reset --hard[tag]
讓工做區回到修改前狀態
而且修改保存在一個臨時工做區
git stash
最新的工做區記錄爲 stash{0} 依次排列
git stash list
git stash apply stash@{2}
git stash drop [stash] 刪除一個
git stash clear 刪除全部
分支即每一個人在原有代碼基礎上創建本身的工做環境, 獨立開發, 不回干擾其餘分支操做 完成後合併到主線
多人開發創建分支優勢: 安全, 不影響其餘分支, 獨立控制進度
前面 * 的表示當前工做分支
git branch
git branch [branch]
git checkout [branch]
表示將某個基於當前分支創建的分支,合併過來
合併分支過程當中可能產生衝突,須要手動解決
在分支操做中儘可能添加新的模塊,不要修改原有代碼內容
git merge [branch]
未合併的分支是沒法用 -d 刪除的( 防手滑,防惡意手滑 )
必須使用 -D 才能夠刪除未合併的分支
git branch -d [branch]
遠程倉庫
遠程主機上的 git 倉庫
git 做爲分佈式結構 每臺主機的 git 倉庫結構類似 只是把其餘主機上的 git 倉庫做爲遠程倉庫
共享倉庫
git 分佈式結構衍生了不少工做模式 共享倉庫是經常使用的模式之一\
普通隱藏的 .git 倉庫不能被其餘主機獲取代碼 共享倉庫便可以將 git 項目共享的倉庫
mkdir yangtuo_git
chown tarena:tarena yangtuo_git
初始化該目錄爲 git 倉庫, 設置 bare 屬性
yangtuo 項目名稱
.git 習慣後綴
cd gitrepo/
git init --bare yangtuo.git
chown -R tarena:tarena yangtuo.git
該操做要在本地的一個 git 項目中執行
與遠程鏈接默認使用 SSH 方法
origin 是給遠程主機起的名字
git remote add origin tarena@127.0.0.1:/home/tarena/yangtuo_git/yangtuo.git
鏈接多個遠程主機的時候 遠程名字不能重複
git remote rm [origin]
-u 表示創建對應分支自動關聯 通常首次向遠程推送某個分支時使用
git branch -a 查看連接的遠程分支 git branch -r 只查看遠程分支
git push -u [origin] [branch]
-f 本地強制上傳到遠程,把遠程的覆蓋
git push -f origin master
git clone tarena@172.40.91.185:/home/tarena/gitrepe/tedu.git
clone 已經自動創建了關聯, pull 能夠直接拉取代碼到對應分支
git pull
--rebase 拉取遠程的文件把本地的覆蓋
git pull --rebase origin master
制霸遠程分支拿來 並不在合併
若想合併 則在須要 git merge [branch]
git fetch
能夠改拉取過來以後的分支名字
git fetch origin master:tmp
git push [origin] [tag]
噹噹前版本落後於遠程版本 沒法更新時使用
git push --force origin