git基本原理
文件的三種狀態(tài)
對于任何一個文件,在 Git 內都只有三種狀態(tài):已提交(committed),已暫存(staged)和 已修改(modified)。
已提交——該文件已經(jīng)被安全地保存在本地數(shù)據(jù)庫中了;
已暫存——表示把已修改的文件放在下次提交時要保存的清單中。
已修改——修改了某個文件,但還沒有提交保存;
由此我們看到 Git 管理項目時,文件流轉的三個工作區(qū)域:Git 的工作目錄,暫存區(qū)域,以及本地倉庫。

基本的 Git 工作流程如下:
1.在工作目錄中修改某些文件。
2.對修改后的文件進行快照,然后保存到暫存區(qū)域。
3.提交更新,將保存在暫存區(qū)域的文件快照永久轉儲到 Git 目錄中。
所以,我們可以從文件所處的位置來判斷狀態(tài):如果是 Git 目錄(git log查看)中保存著的特定版本文件,就屬于已提交狀態(tài);如果作了修改并已放入暫存區(qū)域,就屬于已暫存狀態(tài);如果自上次取出后,作了修改但還沒有放到暫存區(qū)域,就是已修改狀態(tài)。
簡單使用
起步
初次使用需要設置姓名和郵箱
git config --global user.name "你的姓名"
git config --global user.email johndoe@example.com
clone 項目
用于把一個GitHub的項目clone(下載)到本地變?yōu)楸镜貍}庫
git clone git@XXXXXX.git
添加文件并提交
# 創(chuàng)建文件
touch a.md
# 在文件里寫入一個字符串
echo "hello" > a.md
#git status用于查看狀態(tài)
git status
# 把當前目錄下的新增和修改的文件添加到暫存區(qū)
git add .
# 把暫存區(qū)的更新提交到本地庫
git commit -am "add file"
# 首次操作使用git push origin master ,把當前本地庫里的改動推送到遠程庫(origin)的master 分支,之后git push 就好了
git push origin master
修改刪除文件
# 把遠程倉庫的變動更新合并到本地倉庫
git pull
# 修改文件
vim a.md
git add .
# 這里需要注意,如果提交消息包含大量字符串,提交參數(shù)不用加 m
# 此時會進入 vim 界面,按下i進入編輯狀態(tài),進行編輯
# 編輯完成后按下 esc 進入命令態(tài), 輸入 :wq 保存退出 vim
git commit -a(all)指所有的添加刪除都提交到本地倉庫
git push origin master
# 刪除文件
rm -rf a.md
git add .
git commit -am "刪除a.md"
#如果之前已經(jīng)git push origin master 過,后面可以直接簡化成 git push
git push
復雜使用
本地創(chuàng)建一個git 項目推送到遠程空倉庫
mkdir newProject
cd newProject
# 把一個文件夾初始化成一個本地 git 倉庫
# 注意 倉庫和文件夾的區(qū)別在于倉庫下有一個隱藏的 .git文件夾,里面有一些信息
# 對于一個倉庫,刪除.git文件夾,就變成一個普通文件夾了
# git init對文件夾初始化 生成一個.git文件夾 如果原本已經(jīng)是git倉庫 git init會用新生成的git文件夾代替原本的
git init
touch index.html
echo "hello" > index.html
git add .
git commit -am "init"
# 查看本地庫里記錄的遠程庫地址
git remote -v
# 這里把遠程庫的地址添加個標簽叫origin
git remote add origin git@github.com:jirengu/blog2.git
# 推送到遠程庫地址
git push origin master
#慎用,這樣會強制推送,會覆蓋別人的代碼
git push -f origin master
# 在添加一個遠程庫的標簽
git remote add gitlab git@gitlab.com:abc/blog.git
# 推送到gitlab標簽的地址上
git push gitlab master
# 刪除gitlab 標簽
git remote remove gitlab
# 修改origin標簽對應的地址
git remote set-url origin git@github.com:jirengu/blog3.git
# 把 gitlab 標簽改名為coding
git remote rename gitlab coding
分支操作
# 創(chuàng)建本地庫dev 分支
git branch dev
# 切換到dev 分支
git checkout dev
touch b.md
git add .
git commit -am "add b.md"
# 推送到origin地址的dev分支上
git push origin dev
分支合并
#切換到master分支
git checkout master
# 把 dev 分支上的內容合并到當前分支(master) 上
git merge dev
沖突
當自己和別人改同一個文件的同一個地方,在執(zhí)行 git pull時更新本地合并時會出現(xiàn)沖突
修改沖突文件
重新提交
問答題
1. git clone url和 git pull有什么區(qū)別
clone: 用于把一個GitHub項目clone(下載)到本地變?yōu)楸镜貍}庫
pull:把遠程倉庫的變動更新合并到本地倉庫
2. 本地倉庫和遠程倉庫的區(qū)別?
本地倉庫 就是你電腦上的一個倉庫;
遠程倉庫就是在公網(wǎng)服務器上的倉庫。
git離線提交的原理:你修改的文件,保存動作是存放在本地硬盤,提交到本地倉庫,就是說文件修改信息保存到.git文件夾,.git會記錄文件歷史版本。遠程推送就可以將本地倉庫修改的文件推送到遠程倉庫去,這里說的遠程倉庫可以是github,gitlab之類服務器上的倉庫。
3.origin 代表什么?
代表遠程倉庫的地址
origin master指遠程倉庫的地址的master分枝