用git管理版本,你必須知道的事情


用git管理版本,你必須知道的事情


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

  1. 從當前版本回退到任意版本
  2. 查看歷史版本
  3. 對比兩個版本差異

git

相關術語

<code>repository  倉庫branch      分支summary     摘要track       跟蹤modify      修改stage       暫存commit      提交push        推送pull        拉取clone       克隆amend       修改merge       合併conflict    衝突origin      源upstream    上游downstream  下游verbose     詳情reflog      參照日誌複製代碼/<code>

git基礎

  1. modified: 已修改, 修改了項目但沒有提交到本地數據庫, 也就是沒有git add
  2. staged: 已暫存, 就是執行了git add,但是沒有git commit
  3. committed: 已提交, 保存在本地數據庫, 就是執行了git commit

git基本工作流程

  • 寫代碼
  • 對修改的文件進行快照, 保存到暫存區域中
  • 提交代碼, 將暫存區域中的文件快照上傳到git中

基本配置

查看當前的git配置:

<code>git config --listgit config user.namegit config user.email//通過git config -h瞭解更多的git配置查詢複製代碼/<code>

修改當前配置(一般只需要配置一次, 但是如果換了電腦, 或者更換了系統我們就需要從新配置):

<code>//用戶名配置git config --global user.name "xiaohuochai"//郵箱配置git config --global user.email "[email protected]"複製代碼/<code>

項目配置.gitignore

當我們提交項目到git時, 有很多文件是不需要提交的, 比如node_modules, .vscode, .idea等等

這是我們需要在項目的根目錄下新建.gitignore文件

<code>node_modules//*/node_modules/.idea.vscode複製代碼/<code>

配置ssh

當我們從github遠程服務器pull和push代碼時, 如何驗證提交和拉取的代碼是誰? 為了避免每次輸入用戶名, 密碼的麻煩, 我們可以通過配置ssh來解決。

查看本機的ssh:

<code>//ssh一般存在.ssh中//打開命令行cd ~/.ssh           //進入對應目錄ls                  //如果有可以看到私鑰id_rsa文件和公鑰id_rsa.pubcat id_rsa.pub 或者 vim id_rsa.pub      //查看文件內容複製代碼/<code>

如果沒有, 我們可以通過下面命令生成

<code>ssh-keygen複製代碼/<code>

接下來, 我們複製公鑰的內容,登錄github

在右上角頭像下拉settings -> SSH and GPG Keys中點擊 New SSH Key進行添加。

通過ssh -T [email protected]命令來驗證SSH是否配置成功。

git基本操作

  • 初始化新倉庫
<code>git init複製代碼/<code>
  • 查看文件狀態
<code>git status複製代碼/<code>
  • 文件跟蹤
<code>git add xxx         //跟蹤某個文件git add .           //批量跟蹤複製代碼/<code>

文件是否add成功, 我們可以通過git status再檢查一次

  • 文件提交本地倉庫
<code>git commit              //提交文件到本地倉庫git commit -m 'xxx'     //xxx是你本次提交的信息說明git commit -am 'xxx'    //將所有已跟蹤的文件暫存起來一併提交複製代碼/<code>
  • 推送遠程倉庫
<code>git push origin xxx//你可以通過-u指定一個默認的源, 這樣以後push就不用加origingit push -u origin xxx//以後就可以git push複製代碼/<code>
  • 拉取遠程倉庫
<code>git pull origin xxx//可以簡寫git pull, 如果提示no tracking information, 我們可以通過下面方法建立追蹤,後續就可以直接git pull了git branch --set-upstream branch-name origin/branch-name複製代碼/<code>
  • 差異比較
<code>git diff複製代碼/<code>
  • 查看提交歷史
<code>git log                 //按提交時間列出所有的更新,最近的更新排在最上面git log --oneline       //查看簡要的歷史記錄git reflog              //用來記錄每一次命令, 常用來輔助版本切換複製代碼/<code> 

一次正常的代碼提交流程

<code>git pullgit add .git commit -m 'xxx'git push複製代碼/<code>

git版本切換

有時候業務場景, 或者需求變更等各種因素, 需要我們切換回之前的某個版本。

要進行版本切換, 我們就得知道當前處於哪個版本:

<code>git log --oneline複製代碼/<code>

帶有HEAD字樣的就是我們當前所在版本, 通過git reset --hard id命令切換版本。 id可以是:

<code>- HEAD^ : 上個版本- HEAD^^: 上上個版本- HEAD~10: 上10個版本複製代碼/<code>

當你切換回上某個版本之後, 通過git log你就看不到最新版本了,這時我們就可以使用git reflog了, 這個命令會按照之前經過的所有的commit路徑排列。

git分支管理

我們一般開發都會從master分支分離出dev或者其他開發分支, 用來開發, 這樣即使開發出現問題也不會影響主分支。

使用git branch xxx創建一個新的分支。

使用git checkout xxx切換到新的分支

branch, checkout常用命令:

<code>git checkout -b xxx         //可以快速新建並切換到新的分支git branch -d xxx           //當分支合併到主分支, 這個分支就可以通過-d刪除了git branch -D xxx           //刪除那些沒有被合併的分支git branch -a               //查看所有分支複製代碼/<code>

分支合併

注意: 分支合併時, 你一定要保證你在要合併到這個分支的目標分支上

使用git merge xxx即可將xxx分支合併到你當前所在的分支。

正常的合併分支很簡單, 這樣就ok了, 但是分支合併, 如果在不同的分支修改了同一個文件的同一部分, 此時git是無法判斷該使用哪個分支的代碼的, 這樣就會產生衝突,雖然git進行了合併, 但並沒有提交, 需要我們解決衝突, 重新提交。

我們可以通過git status查看是哪些文件發生了衝突,然後逐一解決, 當我們把衝突的代碼按正確的代碼修復後, 需要重新git add, git commit, git push。

操作遠程倉庫

clone遠程倉庫

通過git clone url來克隆遠程倉庫

比如:

<code>//這個默認會在你拉取的路徑下新建一個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 .複製代碼/<code>

查看遠程倉庫git remote

我們克隆的倉庫通過git remote會看到一個叫origin的遠程庫, 這是git默認標識克隆的原始倉庫

通過git remote -v或git remote --verbose我們可以查看到更加詳細的信息,即對應的項目地址, 正常會有兩個, 但如果你沒有push權限的話就只能看到一個fetch的地址。

<code>git remote -vorigin  [email protected]:MasonEast/blog-mason.git (fetch)origin  [email protected]:MasonEast/blog-mason.git (push)複製代碼/<code>

刪除遠程分支

<code>git push origin :xxx//也可以git push origin --delete xxx複製代碼/<code>

刪除遠程倉庫

<code>git remote rm xxx複製代碼/<code>

重命名遠程倉庫

<code>git remote rename oldName newName複製代碼/<code>

關於誤操作

git主要用於版本控制, 協同開發, 誤操作可以撤銷, 但是有的撤銷是不可逆的, 我們一定要慎重對待, 不然可能導致部分代碼丟失。

修改最後一次提交

場景: 某次提交完後, 發現少提交了文件, 我們需要撤銷剛才的提交, 然後重新提交。

<code>git add xxx             //添加少提交的文件到暫存區git commit --amend      //往最後一次提交中追加少提交的文件, 這次提交不會產生記錄複製代碼/<code>

移除本地倉庫的文件

場景: 我們通過git commit將文件提交到本地倉庫後, 才想起來把不想提交的文件加進去了。

<code>git rm xxx  複製代碼/<code>

移除暫存區的文件

場景: 有時候我們習慣性git add ., 但有的文件我們不應該提交, 這時要從暫存區中移除文件。

<code>git reset HEAD xxx      //從暫存區中移除xxx文件複製代碼/<code>

後話

上述只是日常工作可能會用到的基本操作,這裡做一個小小的整理, 還有很多git進階學習的命令請登錄git官方站學習



分享到:


相關文章: