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 ...
随机推荐
- Python基础部分的疑惑解析——pycharm(4)
PyCharm部分设置: 1.安装后破解 2.创建的项目project实际上就是文件夹,可以在右键--show in explorer显示文件夹 3.右键-new--directory是建文件夹 ...
- centos 6.8 解决ibus输入法不正常显示的问题
今天发现 ibus输入法打字时不正常显示,如下图
- Linux驱动:LCD驱动框架分析
一直想花时间来整理一下Linux内核LCD驱动,却一直都忙着做其他事情去了,这些天特意抽出时间来整理之前落下的笔记,故事就这样开始了.LCD驱动也是字符设备驱动的一种,框架上相对于字符设备驱动稍微复杂 ...
- 给访问私有变量添加access method
class TestAccessPrivateVar{ private int a = 1; class MyInner{ /* synthetic final TestAccessPrivateVa ...
- Android-NDK处理用户交互事件
在 android_main(struct android_app* state)函数里面设置输入事件处理函数:state->onInputEvent = &handleInput;// ...
- ELK日志系统之使用Rsyslog快速方便的收集Nginx日志
常规的日志收集方案中Client端都需要额外安装一个Agent来收集日志,例如logstash.filebeat等,额外的程序也就意味着环境的复杂,资源的占用,有没有一种方式是不需要额外安装程序就能实 ...
- Docker挂载主机目录Docker访问出现Permission denied的解决办法
Docker挂载主机目录,访问相应的文件出现Premission denied的权限访问问题, [root@localhost soft]# docker images REPOSITORY ...
- Linux-(touch,cat,nl,more|less,head|tail)
touch命令 1.命令格式: touch [选项]... 文件... 2.命令参数: -a 或--time=atime或--time=access或--time=use 只更改存取时间. -c ...
- mysql RR下不存在则插入
主要看并发事务中不存在则插入(只有key索引)的阻塞情况. 表定义: mysql> desc user; +-------------+------------------+------+--- ...
- 面试题43:计算多少种译码方式(decode-ways)
这道题是非常典型的DP问题.按照DP的套路,关键是讨论出递推表达式,遍历过程中针对当前字符是否为'0'以及前一个字符为'0',分类讨论得出到目前字符为止最多有多少种译码方式?理清了递推表达式,代码是很 ...