關於git你日常工作中會用到的一些東西


前言

git是一個版本控制工具, 版本控制主要的好處有三點:

  1. 從當前版本回退到任意版本

  2. 查看歷史版本

  3. 對比兩個版本差異

git

相關術語

repository  倉庫
branch      分支
summary     摘要
track       跟蹤
modify      修改
stage       暫存
commit      提交
push        推送
pull        拉取
clone       克隆
amend       修改
merge       合並
conflict    沖突
origin      源
upstream    上游
downstream  下游
verbose     詳情
reflog      參照日志
復制代碼

git基礎

  1. modified: 已修改, 修改了項目但沒有提交到本地數據庫, 也就是沒有git add

  2. staged: 已暫存, 就是執行了git add,但是沒有git commit

  3. 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遠程服務器pullpush代碼時, 如何驗證提交和拉取的代碼是誰? 為了避免每次輸入用戶名, 密碼的麻煩, 我們可以通過配置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 -vgit 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
來源:掘金
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM