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. (Apple Git-)
若提示
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 :: + 测试comit vim下的操作 commit 3e79c58a6722ca56687ce30b33e3be5c0aebeaeb
Author: xxxxx <xxxxx@xxx.com>
Date: Sat May :: + 测试commit操作 commit 99c36ffaafadae131ea81bt6fb90a199b365f6c9 (origin/master)
Author: xxxxx <xxxxx@xxx.com>
Date: Fri May :: + 添加一个文件
简单分析下,我这里列了三条记录,第三条是我之前创建文件并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~ // 已经commit,在当前分支回退1条commit,当然2就是2条;回退后修改内容还在本地
git revert HEAD~ //已经push,回滚这条记录,需要注意的是执行完后需要继续执行以下三行才可以,因为远端会保留revert记录
git add .
git commit -a
git push
总结
至此,git的基本使用已经讲完了,了解完这些应该够应付平时的学习工作了。当然,git还有许多其他骚操作(merge、合代码之类的)大家可以用的时候查,或者我以后有时间补充。水平有限,有什么错误欢迎指正,谢谢~
Mac下git的环境搭建和基本使用的更多相关文章
- Mac下R语言环境搭建
Mac下R语言环境搭建 博主在数据分析的时候一直用的python(MATLAB太重了),最近跟其他搞学术的人合作,需要用一下R语言,所以也打算顺便学习一下R. R语言简介 R语言是用于统计分析,图形表 ...
- OpenCV学习系列(零) Mac下OpenCV + xcode环境搭建
# OpenCV学习系列(零) Mac下OpenCV + xcode环境搭建 [-= 博客目录 =-] 1-学习目标 1.1-本章介绍 1.2-实践内容 1.3-相关说明 2-学习过程 2.1-hom ...
- MAC下的XMPP环境搭建
实现即时通信有多种方式,下面讲的是Mac下使用XMPP来实现. XML Messages Presence Protocol 可扩展消息处理协议 简单讲就是基于XML语言的点对点即时通信协议 原理: ...
- mac下selenium+python环境搭建
selenium2+python的环境搭建主要需要python和selenium 1.python mac下自带了python,可以查看版本.当然可以选择安装其它版本的python. 2.seleni ...
- mac下java 开发环境搭建
mac配置java开发环境: jdk1.7 +sdk1.7+maven +tomcat 1.先安装jdk ,才能安装sdk . 2 mac中jdk1.7的默认位置:/Library/Java/Ja ...
- mac下Android开发环境搭建
之前一段时间在学习ios的开发,近一段时间想着也接触下Android开发,以来加深对移动端开发的理解.这里根据自己配置Android开发环境的过程,比较详细的来总结下自己的安装过程,希望对一些正准备配 ...
- Mac下JAVA开发环境搭建
最近开始学习JAVA, 首先配置下环境! 1.Mac自带的jdk版本老了,需要到oracle官网去下载新的jdk,具体下载那个版本看个人需求,然后安装. 安装完成之后打开Terminal, 执行命 ...
- MAC 下 STF 的环境搭建和运行
STF --WEB 端批量移动设备管理控制工具 安装各种包 (首先安装Macport,因为后面需要用到port:http://www.ccvita.com/434.html) linux的基本包安装, ...
- Mac下Qt的环境搭建
1.分别下载并安装XCode和Command Line Tools(必须安装),安装完毕后,Clang就有了. https://developer.apple.com/downloads/ 2.下载Q ...
随机推荐
- 【xsy1611】 数位dp 数位dp
这题是显然的数位$dp$,然而我居然写了一个下午!!! 我们不难想到差分,令$solve(x,y)$表示从第一个数字在区间$[0,x]$,第二个数字在区间$[0,y]$的答案. 不难发现题目中给了你一 ...
- ajax--底层代码
ajax:Asynchronous JavaScript And XML,异步的js与XML.ajax并不是一种新的编程语言,而是一种使用现有标准的新方法.ajax能够在不重载整个网页的情况下与服务器 ...
- vue 中使用 screenfull.js 全屏插件
参考网址: https://blog.csdn.net/houyibing930920/article/details/89214200 https://www.jianshu.com/p/cfbb1 ...
- 剑指offer五十三之表示数值的字符串
一.题目 请实现一个函数用来判断字符串是否表示数值(包括整数和小数).例如,字符串"+100","5e2","-123","3.1 ...
- puppet的使用:puppet的hello world
这个例子完成将master节点上的一个文件放至agent节点上的功能 创建要传输的文件 echo "helloWorld" > /etc/puppet/modules/pup ...
- C#设计模式系列目录
http://www.cnblogs.com/libingql/archive/2012/04/16/2451608.html 抽空,学习,加强!
- 【转】Ext JS 集合1713个icon图标的CSS文件
原文:http://extjs.org.cn/node/715 由于最近在研究Extjs4.1.1,没想到Extjs没有自带的iconCls所使用的图标样式css,就是用那个写那个的,纠结了半天,网上 ...
- getCurrentSession 与 openSession() 的区别
1 getCurrentSession创建的session会和绑定到当前线程,而openSession不会. 2 getCurrentSession创建的线程会在事务回滚或事物提交后自动关闭,而ope ...
- springweb flux 编程模型
Spring WebFlux 编程模型是在spring5.0开始,springbot2.0版本设计出来的新的一种反应式变成模型.它脱胎于reactor模式,是java nio 异步编程模型. 传统一般 ...
- 基于obs+nginx-rtmp-module搭建自己直播的系统
前言 一句唠叨,工欲善其事,必先利其器,在程序员的工作里,搭建各种环境往往花费过多不必要的时间,这里建议搭建服务端环境时,尽量避开win.macos这种系统,个人比较推崇centos. 操作 下面以c ...