Mac下git的環境搭建和基本使用
前言
本文將介紹git的基本概念、環境搭建、日常使用,主要針對剛接觸git,或接觸不久,或好久沒用忘記的同學們,當然是基於mac環境的,window系統也是大同小異!本文將從以下幾個模組介紹,希望能幫助到你們:
注:git可以管理圖片、文件、程式碼等資源,為描述方便,本文以程式碼舉例描述,其他資源使用同理;本文描述力求生動形象,所以部分細節可能模糊一點,暫且忽略即可~
- Git的基本介紹
- Git下載及安裝
- Git基本配置
- 生成金鑰並關聯倉庫
- 日常使用場景
Git的基本介紹
是什麼?
一個管理程式碼的工具;
我們可以通過它把本地倉庫的程式碼提交至遠端倉庫;
我們可以隨意切換到曾經修改過的某一版本;
它可以將你的一份程式碼衍生成多個分支,每個分支都可以修改;
而且可以將某一分支的改動合併到另一個分支;
本地倉庫同一時間只能對應某一遠端倉庫的分支涉及概念
遠端倉庫:服務端存放程式碼的地方,如github、碼雲,或公司的gitlab,本文以github為主
本地倉庫:當前電腦中的倉庫,會與遠端倉庫建立連線,可往遠端倉庫上傳或下拉程式碼
金鑰:本地倉庫與遠端倉庫建立連線的鑰匙,本地存放私鑰,遠端存放公鑰,配對才能建立連線
遠端分支:遠端倉庫可以建立多個分支(預設只有一個master分支),多個分支可以隨意切換、各自修改
本地分支:本地倉庫也可以建立多個分支(預設只有一個master分支),本地分支一般會與一個遠端分支關聯,當然可以切換使用流程
為便於理解,粗略介紹一般使用流程,後面會詳細介紹各個步驟和其他使用場景
1、下載安裝並配置git環境
2、生成金鑰對:一個公鑰,一個私鑰
3、建立一個遠端倉庫,如在github上註冊賬號,並建立一個倉庫,上傳公鑰
4、在本地克隆一份遠端倉庫,作為本地倉庫
5、本地倉庫作改動,然後提交至遠端倉庫
Git的下載及安裝
點選Git,然後選擇下載安裝包
Mac下是不需要主動配置環境變數的(系統已經預設配置),所以可以直接通過以下命令來檢視版本號
git version
若能顯示如下說明安裝完成
git version 2.15.1 (Apple Git-101)
若提示
xcode-select: note: no developer tools were found at '/Applications/Xcode.app', requesting install.
Choose an option in the dialog to download the command line developer tools
或者
xcrun: error: active developer path ("/Applications/Xcode.app/Contents/Developer") does not exist,
use `xcode-select --switch path/to/Xcode.app` to specify the Xcode that you wish to use for command
line developer tools (or see `man xcode-select`)
說明你的mac沒有安裝 xcode,一般使用者也不需要去官網下載全部xcode環境,使用以下命令部分安裝即可
xcode-select --install // 點選安裝,單獨安裝CommandLineTools
sudo xcode-select --switch /Library/Developer/CommandLineTools
安裝後再次執行上述檢視version命令,正常顯示說明安裝完成
Git基本配置
可以通過以下指令檢視當前git的config配置
git config --list
通過以下指令配置使用者名稱和郵箱,git提交時會需要這些資訊
git config --global user.name "your_name"
git config --global user.email "your_email@gmail.com"
git config core.ignorecase false // 本地倉庫檔案是否大小寫敏感,建議配置(不配置也沒關係)
到此,git環境已經安裝配置完成
生成金鑰並關聯倉庫
1、先檢視本地是否有金鑰對,有的話就不用建立了,如果是第一次安裝肯定是沒有的,開啟終端,執行以下命令
cd ~/.ssh
金鑰生成後會存放在.ssh檔案下,若此檔案存在並ls後顯示如下內容,說明你建立過,直接關聯倉庫即可,否則繼續生成
id_rsa id_rsa.pub known_hosts
2、通過以下命令生成金鑰對
ssh-keygen -t rsa -C "your_email@youremail.com" // 這裡是你自己的郵箱啊親!不敢太實在了
建立過程中,會詢問你金鑰儲存位置,直接enter就好,會讓你設定密碼,可直接enter,也可輸入密碼(輸密碼時是不顯示輸入進度的,直接按鍵盤就好了,別傻傻的等),最後顯示一個矩形方框就說明建立成功了
3、上傳金鑰
私鑰就存在本地即可,公鑰需要上傳至遠端倉庫,這樣才能讓本地倉庫和遠端倉庫建立連線;同步驟1,cd到.ssh檔案,ls出上述三個檔案,然後複製公鑰id_rsa.pub內容,如下
xxxdeMBP:~ liyang$ cd ~/.ssh
xxxdeMBP:.ssh liyang$ ls
id_rsa id_rsa.pub known_hosts
xxxdeMBP:.ssh liyang$ cat id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDRIqBw5EEyfmXX6NJ3gZB7SOFC1ATsiSPgVb8kchYNvM7qS8h/WJeFPVcY+5Uyx
SlQ/aGH1UtnLJVrTUryO5iOFN+VKSwsJPFUxxx61TQ5pV5v/HK3FzXe8+2F5ZFrGmeWr7oaWXDS4gS8DWQpY5mzPRY6MsHZ4o2tUw
+5toqlgdR/tVnhOwVa4tZ7HuUbQ4twpt2YuFFix9TAnvLXPReTt3gaFrswLePYRFVniK2pSUAnAnxPugTDH1dFlucuFFREUSy+/kB
YlXdayo8+SkdonoDVG9sHAMb6YyJtpnY/PC28NcBWphcWqI/1yPhqTSFIBo6xxx4LWN3W4t79Un9Z xxyaxx@xxx.com
複製上述四行公鑰,上傳至github:登入賬號、點選頭像、選擇Settings、選擇SSH and GPG keys,然後new一個ssh key,名稱隨便起
4、建立本地倉庫
遠端倉庫建立好之後,複製倉庫地址,然後在本地克隆一個(若你設定過密碼,會要求你輸入密碼,輸入即可),如下
git clone git@github.com:YourCount/GitTest.git // clone後面的連線替換成你自己的
至此,本地倉庫和遠端倉庫都已建立好並建立連線,我們可以使用git來管理程式碼了
日常使用場景
注:雖然目前有不少人性化的gui工具,但我們不應該過於依賴圖形介面,切身經歷,這玩意用久了你就廢了!所以趕緊學用命令列操作吧同學們~
檢視分支
我們通常會關心:本地有哪些分支、遠端有哪些分支、本地分支目前與哪個遠端分支有關聯等,大家在檢視時可能發現自己的遠端和本地都只有一個分支,這個沒有關係,等看完建立分支再回來試用即可
檢視本地分支
git branch
執行上述命令後,在我本地顯示如下,說明我本地有4個分支,當前程式碼所屬的分支是master分支
* master
v1
v2
v3
檢視所有分支
git branch -a
執行上述命令後,我本地顯示如下,說明我共有6個分支,2個遠端分支,4個本地分支
* master
v1
v2
v3
remotes/origin/master
remotes/origin/remote_branch_1
執行以下命令可檢視所有分支及其最近一條提交記錄
git branch -av
* master 5dd8070 測試push
v1 5dd8070 測試push
v2 5dd8070 測試push
v3 5dd8070 測試push
remotes/origin/master 5dd8070 測試push
remotes/origin/remote_branch_1 5dd8070 測試push
檢視本地分支與遠端關聯分支
git branch -avv
執行如上命令時,顯示如下,說明我本地分支是master,關聯與遠端分支origin/master。剩下的只有v4與遠端分支有關聯,其他分支都沒有關聯遠端分支
a 5dd8070 測試push
b 5dd8070 測試push
* master 5dd8070 [origin/master] 測試push
v1 5dd8070 測試push
v2 5dd8070 測試push
v3 5dd8070 測試push
v4 5dd8070 [origin/master] 測試push
remotes/origin/master 5dd8070 測試push
remotes/origin/remote_branch_1 5dd8070 測試push
檢視遠端分支直接的關係
git remote show origin
* remote origin
Fetch URL: git@github.com:xxxx/GitTest.git
Push URL: git@github.com:xxxx/GitTest.git
HEAD branch: master
Remote branches:
master tracked
remote_branch_1 tracked
Local branches configured for 'git pull':
master merges with remote master
v4 merges with remote master
Local ref configured for 'git push':
master pushes to master (up to date)
提交程式碼到本地倉庫
本地倉庫和遠端倉庫一樣,也有分支啊、版本啊的概念。所以你本地修改了程式碼,需要先commit到本地倉庫,然後才將commit記錄push到遠端倉庫,這裡我們先說怎麼commit到本地倉庫
檢視本地倉庫狀態
執行以下命令(注意,這些命令需要在本地倉庫的根目錄執行,後面的也是)
git stauts
若顯示如下內容,說明你的本地分支是master,而且沒有改動,所以沒什麼可提交的,此時執行git diff也是什麼都沒有
On branch master
Your branch is up to date with 'origin/master'.
nothing to commit, working tree clean
若顯示如下內容,說明你的本地分支是master,並且修改了”a“檔案,而且沒有暫存(所有改動暫存後才能提交),此時通過git diff就可以檢視你改動的內容
Your branch is up to date with 'origin/master'.
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
modified: a
no changes added to commit (use "git add" and/or "git commit -a")
提交修改
上文說道,未暫存(這個概念也比較抽象,可以理解成打包或者說是收拾,東西收拾好才能給人嘛)的檔案是不能提交的,所以我們需要先把改動暫存。暫存可以執行如下兩條命令
git add a // 只暫存a檔案,如果當本修改了好多檔案但你只想提交一個,可以使用這個命令
git add . // 暫存全部檔案
當然,對應的,暫存後突然不想暫存了,或者說東西打包好了突然不想給人了,可以拆開嘛,也就是撤銷add操作,對應如下兩條命令
git reset a // 撤銷add a檔案
git reset . // 撤銷add 所有檔案
可以試驗一下,暫存後再通過git status檢視狀態,結果是不一樣的
執行如下命令,提交本次改動
git commit -m "本次修改描述資訊"
後面的描述資訊是提交時一般要備註的,提交時沒必要加雙引號。當然,若你有複雜的提交資訊,可以通過以下命令,在vim裡操作,執行後跟普通的vim操作一樣了
git commit -s
到此,我們本地倉庫已經提交完成,可以通過以下命令來查詢本地提交記錄
git log
我這裡顯示如下結果
commit af1a469deacd3092bb994458131ae82d5babf7ca (HEAD -> master)
Author: xxxxx <xxxxx@xxx.com>
Date: Sat May 12 23:32:55 2018 +0800
測試comit vim下的操作
commit 3e79c58a6722ca56687ce30b33e3be5c0aebeaeb
Author: xxxxx <xxxxx@xxx.com>
Date: Sat May 12 23:29:36 2018 +0800
測試commit操作
commit 99c36ffaafadae131ea81bt6fb90a199b365f6c9 (origin/master)
Author: xxxxx <xxxxx@xxx.com>
Date: Fri May 11 01:36:08 2018 +0800
新增一個檔案
簡單分析下,我這裡列了三條記錄,第三條是我之前建立檔案並push到遠端倉庫了(當然所有log的Author資訊我改了下),所以我們看到第三條括號了寫的是(origin/master)表明已經推送到遠端倉庫了;前兩條是我剛剛commi到本地的,所以顯示(HEAD -> master),我們現在需要做的就是將本地倉庫的程式碼push到遠端倉庫
提交程式碼到遠端倉庫
提交程式碼前,建議先下拉程式碼並rebase。因為我們的一份程式碼,可能多人同時修改,當多人同時修改一處程式碼時會產生分叉合併,所以為了保證分支記錄純淨(只有一條線),我們提交時先把被人提交的pull並rebase一下然後提交自己的,所以執行如下命令
git pull --rebase // push前先下拉並rebase程式碼
git push origin Head:master // 提交程式碼到遠端master分支
git push // 也可以直接這樣提交,前提是當前分支與遠端分支有關聯(當然和上面二選一)
下拉程式碼到本地倉庫
當遠端倉庫有改動時,我們需要將最新程式碼下拉至本地倉庫
git pull --rebase
管理分支
建立本地分支
git checkout -b v2 // 建立新分支v2,並將當前分支切換為v2
切換分支
git checkout v1 // 從當前分支切換為v1
建立遠端分支
git push origin v1:remote_branch_v1
// 以本地分支v1為基準,建立遠端分支remote_branch_v1,中間":"兩邊不要有空格
刪除遠端分支
git push origin :remote_branch_v1 // push一個空的分支覆蓋掉遠端分支,就是刪除
從遠端拉取分支到本地,並建立關係
git checkout -b v4 origin/master // v4本地原來不存在,master遠端原來存在
直接推送程式碼到關聯的遠端分支
有時候我們直接通過git push來推送程式碼時,發現它提示如下
fatal: The upstream branch of your current branch does not match
the name of your current branch. To push to the upstream branch
on the remote, use
git push origin HEAD:remote_branch_v1
To push to the branch of the same name on the remote, use
git push origin local_v1
這時候我們執行如下命令,就可以將直接通過git push將程式碼推送到與本地分支關聯的遠端分支了
git config --global push.default upstream
撤銷操作
人生沒有後悔藥,但是git有,而且很強大
git checkout . // 程式碼改動後,撤銷所有改動
git reset a // git add a 後,撤銷對a的add
git reset . // git add . 後,撤銷add所有
git reset HEAD~1 // 已經commit,在當前分支回退1條commit,當然2就是2條;回退後修改內容還在本地
git revert HEAD~1 //已經push,回滾這條記錄,需要注意的是執行完後需要繼續執行以下三行才可以,因為遠端會保留revert記錄
git add .
git commit -a
git push
總結
至此,git的基本使用已經講完了,瞭解完這些應該夠應付平時的學習工作了。當然,git還有許多其他騷操作(merge、合程式碼之類的)大家可以用的時候查,或者我以後有時間補充。水平有限,有什麼錯誤歡迎指正,謝謝~
相關文章
- Android systrace環境的搭建和使用Android
- Mac環境下MySQL的安裝和基本命令的使用MacMySql
- Linux 環境下 Git 伺服器的搭建與基本使用(CentOS 7 版本)LinuxGit伺服器CentOS
- mac系統下git、mysql、nginx、php的環境搭建MacGitMySqlNginxPHP
- 「MoreThanJava」Day 1:環境搭建和程式基本結構元素Java
- Mac 基本開發環境配置Mac開發環境
- mac 下搭建flutter環境MacFlutter
- Linux環境下ApacheActiveMQ基本安裝LinuxApacheMQ
- RocketMQ 視覺化環境搭建和基礎程式碼使用MQ視覺化
- git的基本使用Git
- MAC環境下PHP開發除錯環境搭建MacPHP除錯
- CentOS 7 使用 docker 搭建基本的 lnmp 環境CentOSDockerLNMP
- MAC 下的PHP開發環境搭建MacPHP開發環境
- Mac 環境下 Redis 叢集的搭建MacRedis
- Mac環境下安裝PodMac
- Linux環境下Apache ActiveMQ 基本安裝LinuxApacheMQ
- Flutter開發環境搭建和除錯Flutter開發環境除錯
- FFmpeg系列(一)-Mac環境下使用NDK編譯FFmpegMac編譯
- node環境搭建和vue-cli腳手架使用詳解Vue
- (全)Python 的虛擬環境構建和jupyter notebook 中虛擬環境切換Python
- Windows下搭載虛擬機器以及環境安裝Windows虛擬機
- mac下搭建android 開發環境MacAndroid開發環境
- Mac環境下安裝配置RedisMacRedis
- Mac下配置PHP+MySql環境MacPHPMySql
- git基本使用Git
- Mac 環境下 Android 使用 Jenkins 構建自動化打包MacAndroidJenkins
- Windows 環境下 git 客戶端中的 git-bash 和 MINGW64WindowsGit客戶端
- mac 下利用自帶的php 和apache 搭建 phpstorm+git+xdebug+mysql 的php開發環境MacPHPApacheORMGitMySql開發環境
- 在nodejs環境裡使用瀏覽器環境下的document物件NodeJS瀏覽器物件
- (一) Mac 環境下 Flutter | Android Studio 的安裝MacFlutterAndroid
- Windows環境下的Nginx環境搭建WindowsNginx
- Go 之基礎速學 (一) 最簡環境搭建和 goland 的安裝使用GoLand
- Docker 入門(Mac環境)-part 1 入門基本操作DockerMac
- Linux & Windows 環境下 RabbitMQ 安裝與基本配置LinuxWindowsMQ
- Linux & Windows 環境下 Redis 安裝與基本配置LinuxWindowsRedis
- 部落格專案環境搭建和Model設計
- Mac環境下WingIDE切換python版本MacIDEPython
- 在Mac下怎麼搭建MySQL環境?MacMySql