前言
git是一個版本控制工具, 版本控制主要的好處有三點:
-
從當前版本回退到任意版本
-
查看歷史版本
-
對比兩個版本差異
git
相關術語
repository 倉庫
branch 分支
summary 摘要
track 跟蹤
modify 修改
stage 暫存
commit 提交
push 推送
pull 拉取
clone 克隆
amend 修改
merge 合並
conflict 沖突
origin 源
upstream 上游
downstream 下游
verbose 詳情
reflog 參照日志
復制代碼
git基礎
-
modified: 已修改, 修改了項目但沒有提交到本地數據庫, 也就是沒有
git add
-
staged: 已暫存, 就是執行了
git add
,但是沒有git commit
-
committed: 已提交, 保存在本地數據庫, 就是執行了
git commit
git基本工作流程
- 寫代碼
- 對修改的文件進行快照, 保存到暫存區域中
- 提交代碼, 將暫存區域中的文件快照上傳到git中
基本配置
查看當前的git配置:
git config --list
git config user.name
git config user.email
//通過git config -h了解更多的git配置查詢 復制代碼
修改當前配置(一般只需要配置一次, 但是如果換了電腦, 或者更換了系統我們就需要從新配置):
//用戶名配置 git config --global user.name "xiaohuochai" //郵箱配置 git config --global user.email "121631835@qq.com" 復制代碼
項目配置.gitignore
當我們提交項目到git時, 有很多文件是不需要提交的, 比如node_modules, .vscode, .idea
等等
這是我們需要在項目的根目錄下新建.gitignore
文件
node_modules/
/*/node_modules/ .idea .vscode 復制代碼
配置ssh
當我們從github遠程服務器pull
和push
代碼時, 如何驗證提交和拉取的代碼是誰? 為了避免每次輸入用戶名, 密碼的麻煩, 我們可以通過配置ssh來解決。
查看本機的ssh:
//ssh一般存在.ssh中
//打開命令行
cd ~/.ssh //進入對應目錄
ls //如果有可以看到私鑰id_rsa文件和公鑰id_rsa.pub
cat id_rsa.pub 或者 vim id_rsa.pub //查看文件內容
復制代碼
如果沒有, 我們可以通過下面命令生成
ssh-keygen
復制代碼
接下來, 我們復制公鑰的內容,登錄github
在右上角頭像下拉settings
-> SSH and GPG Keys
中點擊 New SSH Key
進行添加。
通過ssh -T git@github.com
命令來驗證SSH是否配置成功。
git基本操作
- 初始化新倉庫
git init
復制代碼
- 查看文件狀態
git status
復制代碼
- 文件跟蹤
git add xxx //跟蹤某個文件 git add . //批量跟蹤 復制代碼
文件是否add
成功, 我們可以通過git status
再檢查一次
- 文件提交本地倉庫
git commit //提交文件到本地倉庫 git commit -m 'xxx' //xxx是你本次提交的信息說明 git commit -am 'xxx' //將所有已跟蹤的文件暫存起來一並提交 復制代碼
- 推送遠程倉庫
git push origin xxx
//你可以通過-u指定一個默認的源, 這樣以后push就不用加origin git push -u origin xxx //以后就可以 git push 復制代碼
- 拉取遠程倉庫
git pull origin xxx
//可以簡寫git pull, 如果提示no tracking information, 我們可以通過下面方法建立追蹤,后續就可以直接git pull了 git branch --set-upstream branch-name origin/branch-name 復制代碼
- 差異比較
git diff
復制代碼
- 查看提交歷史
git log //按提交時間列出所有的更新,最近的更新排在最上面 git log --oneline //查看簡要的歷史記錄 git reflog //用來記錄每一次命令, 常用來輔助版本切換 復制代碼
一次正常的代碼提交流程
git pull
git add .
git commit -m 'xxx' git push 復制代碼
git版本切換
有時候業務場景, 或者需求變更等各種因素, 需要我們切換回之前的某個版本。
要進行版本切換, 我們就得知道當前處於哪個版本:
git log --oneline
復制代碼
帶有HEAD
字樣的就是我們當前所在版本, 通過git reset --hard id
命令切換版本。 id可以是:
- HEAD^ : 上個版本
- HEAD^^: 上上個版本
- HEAD~10: 上10個版本
復制代碼
當你切換回上某個版本之后, 通過git log
你就看不到最新版本了,這時我們就可以使用git reflog
了, 這個命令會按照之前經過的所有的commit
路徑排列。
git分支管理
我們一般開發都會從master
分支分離出dev
或者其他開發分支, 用來開發, 這樣即使開發出現問題也不會影響主分支。
使用git branch xxx
創建一個新的分支。
使用git checkout xxx
切換到新的分支
branch, checkout
常用命令:
git checkout -b xxx //可以快速新建並切換到新的分支 git branch -d xxx //當分支合並到主分支, 這個分支就可以通過-d刪除了 git branch -D xxx //刪除那些沒有被合並的分支 git branch -a //查看所有分支 復制代碼
分支合並
注意: 分支合並時, 你一定要保證你在要合並到這個分支的目標分支上
使用git merge xxx
即可將xxx分支合並到你當前所在的分支。
正常的合並分支很簡單, 這樣就ok了, 但是分支合並, 如果在不同的分支修改了同一個文件的同一部分, 此時git是無法判斷該使用哪個分支的代碼的, 這樣就會產生沖突,雖然git進行了合並, 但並沒有提交, 需要我們解決沖突, 重新提交。
我們可以通過git status
查看是哪些文件發生了沖突,然后逐一解決, 當我們把沖突的代碼按正確的代碼修復后, 需要重新git add
, git commit
, git push
。
操作遠程倉庫
clone遠程倉庫
通過git clone url
來克隆遠程倉庫
比如:
//這個默認會在你拉取的路徑下新建一個blog-mason的文件夾 git clone https://github.com/MasonEast/blog-mason.git //如果你不想要文件夾blog-mason, 你可以這樣, 在url后面,空格加新名字 git clone https://github.com/MasonEast/blog-mason.git newName //如果你就想要在當前路徑下放項目文件, 不要那個外面的文件夾了, 可以用. git clone https://github.com/MasonEast/blog-mason.git . 復制代碼
查看遠程倉庫git remote
我們克隆的倉庫通過git remote
會看到一個叫origin的遠程庫, 這是git默認標識克隆的原始倉庫
通過git remote -v
或git remote --verbose
我們可以查看到更加詳細的信息,即對應的項目地址, 正常會有兩個, 但如果你沒有push權限的話就只能看到一個fetch的地址。
git remote -v
origin git@github.com:MasonEast/blog-mason.git (fetch)
origin git@github.com:MasonEast/blog-mason.git (push)
復制代碼
刪除遠程分支
git push origin :xxx
//也可以 git push origin --delete xxx 復制代碼
刪除遠程倉庫
git remote rm xxx
復制代碼
重命名遠程倉庫
git remote rename oldName newName
復制代碼
關於誤操作
git主要用於版本控制, 協同開發, 誤操作可以撤銷, 但是有的撤銷是不可逆的, 我們一定要慎重對待, 不然可能導致部分代碼丟失。
修改最后一次提交
場景: 某次提交完后, 發現少提交了文件, 我們需要撤銷剛才的提交, 然后重新提交。
git add xxx //添加少提交的文件到暫存區 git commit --amend //往最后一次提交中追加少提交的文件, 這次提交不會產生記錄 復制代碼
移除本地倉庫的文件
場景: 我們通過git commit
將文件提交到本地倉庫后, 才想起來把不想提交的文件加進去了。
git rm xxx
復制代碼
移除暫存區的文件
場景: 有時候我們習慣性git add .
, 但有的文件我們不應該提交, 這時要從暫存區中移除文件。
git reset HEAD xxx //從暫存區中移除xxx文件 復制代碼
后話
上述只是日常工作可能會用到的基本操作,這里做一個小小的整理, 還有很多git進階學習的命令還沒有提到, 比如git stash, git rebase
等, 主要是在下也沒完全玩明白, 就不好在此提及了。
作者:MasonEast
鏈接:https://juejin.im/post/5e0f401f6fb9a047f164fc9f
來源:掘金
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。