30分鐘吃掉Git和GitHub常用操作

2020-11-02     AI科技大本營

原標題:30分鐘吃掉Git和GitHub常用操作

作者 | 梁雲1991

來源 | Python與算法之美

頭圖 | CSDN付費下載自視覺中國

GitHub是什麼

GitHub是一個非常流行的全球代碼託管平台,基於Git版本控制技術實現,同時GitHub也是一個活躍的開發者交流社區。許多的開源項目都在GitHub上發布。例如著名的Linux作業系統內核的原始碼。

Git是什麼

Git是目前世界上最先進的分布式版本控制系統(沒有之一)。

它由Linux系統之父Linus Torvalds在2005年用C語言開發。

Git是一個分布式版本控制系統,沒有中央伺服器,不同於svn等需要中央伺服器的集中式版本控制系統。

Git的功能:版本控制(版本管理,遠程倉庫,分支協作)

人工版本管理:

Git版本管理:

Git功能原理

  • git版本控制系統由工作區,緩存區,版本庫組成。

  • git跟蹤的是文件的修改而不是全部文件。

  • git擅長管理代碼等文本文件,不擅長管理圖片等二進位文件。

快速上手

安裝Git

下載位置: Git下載連結—— https://git-scm.com/downloads

可以在bash中執行git命令,也可以在Jupyter Notebook中執行.

配置用戶信息

git config --global user.name "XX"git config --global user.email "XX@XX"

新建文件夾並切入

mkdir git-learncd git-learn

創建倉

git init

新建readme.txt

echo "hello world" >>readme.txt

查看當前狀態:

git status

添加全部修改到暫存區並提交

git add -Agit commit -m"comment"

添加github遠程庫並推送倉庫

git remote add origin https://github.com/XX/XXgit push -u origin master

在github上的項目clone到本地文件

git clone https://github.com/XX/XX ../XX

安裝配置

命令列表:

  • config(配置信息)

  • init(創建倉庫)

  • help(幫助信息)

  • status(當前狀態)

特殊文件:

  • gitignore過濾文件(配置git無需管理的目錄和文件)

示範1:基本配置

#設置用戶名:

git config --global user.name "XXX"

#設置用戶郵箱:

git config --global user.email "XXX@XX"

#初始化倉庫

git init

示範2:獲取幫助

#獲取常用git命令列表:

git help

#查看當前狀態,獲取提示:

git status

示範3:建立.gitignore過濾配置文件

#過濾掉.DS_store文件

echo ".DS_store" >.gitignore

#過濾掉.ipynb_checkpoints目錄

echo ".ipynb_checkpoints/" >> .gitignore

#過濾掉所有zip文件

echo "*.zip" >>.gitignore

版本管理

命令列表:

  • add(修改暫存)

  • commit(提交修改)

  • reset(版本回退)

  • checkout(撤銷修改)

  • rm(刪除文件)

  • diff(比較文件)

  • log(版本列表)

  • reflog(版本歷史)

git reset的說明:

git resetHEAD^ #可以回退到上一個版本。git reset HEAD^^ #可以回退到上上個版本。git reset a234b3 #可以回退到版本號為 a234b3的版本。git reset --hard head^ #修改版本庫,保留暫存區,保留工作區git reset --mixed head^ #修改版本庫,修改暫存區,保留工作區git reset --soft head^ #修改版本庫,保留暫存區,保留工作區

示範1:版本提交

echo"hello world" >>readme.txtgit add readme.txtgit add -Agit commit -m"add readme.txt"#修改覆蓋上一次commit:git commit --amend#先暫存再提交:git commit -a -m"modify readme.txt"

示範2:版本回退

git reset--hard head^git reset head a23b5#撤銷修改:git checkout -- readme.txt#圖形顯示倉庫版本及分支狀態:git log --oneline --graph --all#查看head指向過的版本歷史:git reflog

示範3:日誌壓縮

git reset--soft a23b5 #版本庫回退到某個版本,工作區保留修改git commit -m 'add feature' #將工作區的修改寫到版本庫中,a23b5到當前的日誌被刪除

示範4:撤銷修改

echo "hello Haidian">>readme.txtgit checkout -- readme.txt #使用暫存區內容覆蓋文件

示範5:版本對比

#查看工作區文件與暫存區文件區別:git diff readme.txt#查看工作區文件和head文件區別:git diff --head readme.txt#查看暫存區文件與head文件區別:git diff --cached readme.txt#查看兩個版本某一文件的區別:git diff a458b d23e5 -- readme.txt

遠程倉庫

命令列表:

  • remote(設置遠程)

  • push(推送遠程)

  • clone(克隆遠程)

  • pull(合併遠程)

  • fetch(拉取遠程)

遠程倉庫說明:

#通常可以用SSH協議和遠程庫通信或使用http協議和遠程庫通信。#http協議較為方便,但SSH協議方式速度較快。#運行下面命令,並一路回車,在用戶主目錄里找到.ssh目錄。ssh-keygen -t rsa -C "[email protected]"#目錄下的id_rsa有私鑰,不能泄露出去。裡面的id_rsa.pub是公鑰,可分享給別人。#在GitHub——> settings ——> SSH Keys 頁面添加SSH公鑰。#將公鑰綁定github後嘗試建立SSH連接:ssh -T [email protected]

示範1:添加遠程

#使用ssh地址添加github遠程庫連接並命名為github,ssh方式更穩定快速,但稍麻煩:git remote add github [email protected]:lyhue1991/ai.git:#使用url地址添加遠程庫,url方式更簡單:git remote add origin https://github.com/lyhue1991/GitHub.git

示範2:推送到遠程

#推送本地至遠程庫origin的master分支:git push -u origin master#查看遠程庫信息:git remote -v#移除和遠程庫的連接:git remote remove orgin

示範3:拉取遠程

#建立當前master分支與遠程庫develop分支的追蹤關係:git branch --set-upstream master origin/develop#將遠程倉庫克隆到本地父目錄的ML文件夾:git clone https://github.com/lyhue1991/machine-learning.git ../ML

#取回origin的develop分支與當前master分支合併(或會衝突):git pull orgin/develop:master

#獲取origin的develop分支到本地並用merge合併(pull≈fetch+merge):git fetch origin developgit merge origin/develop

分支協作

命令列表:

  • branch(設置分支)

  • checkout(切換分支)

  • merge(合併分支)

  • cherry-pick(採集提交)

  • rebase(重演分支)

  • stash(儲藏管理)

  • tag(標籤管理)

示範1:切換分支

#查看分支信息:git branch#當前head位置新建develop分支:git branch develop#創建並切換到名稱為feature的新分支:git checkout -b feature#切換至master分支:git checkout master

示範2:分支整合

#head處於develop分支,合併feature分支(或會衝突):git merge --no-ff -m"merge feature" feature#採集其它分支中版本號為a458b的commit提交至當前分支(或會衝突):git cherry-pick a458b#使用當前所在分支作為base重演develop分支(或會衝突):git rebase develop

示範3:儲藏和標籤

gitstash;git stash pop;git stash list;git stash save "message"git stash apply @2git tag;git tag v1.0;git tag v0.9 a2543d;#推送標籤到遠程(標籤不會自動推送)git push origin v1.0#刪除遠程標籤(先刪本地,再push):git tag -d v0.9git push origin :refs/tags/v0.9

git分支管理最佳實踐:

  • master: 主分支,主要用來版本發布。

  • develop:日常開發分支,該分支正常保存了開發的最新代碼。

  • feature:具體的功能開發分支,只與 develop 分支交互。

  • release:release 分支可以認為是 master 分支的未測試版。比如說某一期的功能全部開發完成,那麼就將 develop 分支合併到 release 分支,測試沒有問題並且到了發布日期就合併到 master 分支,進行發布。

  • hotfix:線上 bug 修復分支。

文章來源: https://twgreatdaily.com/zh-hk/y1c8iXUBXUDM5GzGJCMb.html











CSDN湘苗培優

2020-12-24