为了督促自己能看完这个网站的学习教程,边看边做了些简要的笔记,记录了常用命令,其实也就是自己打了些简单的命令,好多直接就粘贴过来了,也算是一个学习的证明吧,想按详细的教程,还是要去博主的园子学习啊地址是:
上面的Python教程也是不错,有时间也要学习学习。下面是简单的记录,学习旅程的小开始!
----------------------------lesson 01----------------------------------
git init
git status
git add readme.txt
git commit -m "add readme"
git diff
git log
git log --pretty=oneline
当前版本HEAD,上一个版本HEAD^,上上一个HEAD^^,上一百个HEAD~100
回到上一个版本
git reset --hard HEAD^
会丢失这个版本以后的版本,再想回去只能用--hard后面跟上id号码了,只要当前终端未关闭只需要给出前几位就可,git会自己去寻找,但要确保给出的这个能唯一确定想要恢复的那个版本。
不过忘了id也没关系,Python友好的给了后悔药,使用命令可以查看所有提交过的每次操作然后找到版本id,我的给出了前7位
git reflog
git reset --hard commt_id
--------------------------------lesson 02---------------------------
为什么有两步操作?add 和 commit干了什么?
git的storage暂存区的作用
Git管理的是修改而不是文件
git commit只会提交你刚add过的文件,没add的那些修改不会提交,所以只要工作区修改了就别忘了add,记住真正提交到版本库里需要两步操作。使用如下命令可以查看版本库里和工作区里的文件的区别:
git diff HEAD -- readme.txt
如果反悔了想撤销修改,得看你在哪步犯的糊涂想反悔
1.修改了文件没有add到暂存区:git checkout -- readme.txt
2.修改了文件add到暂存区但还没有commit:先用git reset HEAD file退到原来版本,在用git checkout -- readme.txt撤销更改,暂存区和工作区都干净了
3.修改了文件add了也commit到版本库了但没有提交给远程服务器:利用版本恢复git reset --hard commt_id
4.修改了文件add了也commit到版本库了并提交给远程服务器:目前我帮不了你了啊
删除操作:
git rm test.txt
git commit -m "delete test.txt"
如果误删除想撤销,用git checkout -- test.txt
git checkout其实是用版本库里的版本替换工作区的版本,无论工作区是修改还是删除,都可以“一键还原”。
--------------------------------------lesson 03--------------------------
远程仓库
用Github这个神奇的网站,它提供代码托管服务,可以得到免费的远程仓库。首先要有SSH key。
创建SSH Key
ssh-keygen -t rsa -C "youremail@example.com"
在用户主目录下/home/bmr/会生成.ssh的文件夹(隐藏的),里面会有两个文件id_rsa和id_rsa.pub。前者是私钥不可泄漏出去,后者是公钥,可以告诉别人,也就是用来添加到Github的SSH Key里面的。这样可以免费托管代码,但是别人都能看得见你的代码。要想保护起来,交钱或者自己建立一个Git服务器,以后会讲的~~
1). 创建一个新的Git仓库:
登录后右上角Create a new repo,点击
2). 创建后的提示:
在本地用命令行创建repo:create a new repository on the command line
在本地的目录下执行命令:
将已有的本地repo添加到仓库:$ git remote add origin https://github.com/maoranbian/learngit.git
或者
$ git remote add origin git@github.com:michaelliao/learngit.git
注意两种都可,只是用到的协议不同,前者是https协议,后者是ssh是默认的协议,速度更快。
然后把当前分支推送到远程 $ git push -u origin master
-u的作用,第一次推送时要加此命令。
以后修改了本地文件,可以直接用git push origin master
从远程仓库克隆
在GitHub已有一个建立好的远程库gitskills.git,在本地选定好的文件夹里用命令克隆到本地库
git clone git@github.com:maoranbian/gitskills.git
-------------lesson 04-----------------
分支管理
Git用HEAD指针指向当前分支的最新提交
git branch 查看所有分支,Git会列出所有分支并在当前分支开头标记一个*
git checkout -b dev 创建分支dev并将HEAD指向该分支,相当于合并了下面的两步操作
git branch dev
git checkout dev
git checkout master 将当前分支切换到master
git merge dev 将分支dev的内容合并到当前分支matster,采用Fast-Forward快进模式
git branch -d dev 合并结束后删除dev分支
默认的主分支就是master
练习step:
1.建立并切换到一个dev分支
2.在dev分支修改readme并add和commit
3.切换到master分支并merge dev
4.删除dev分支
解决冲突:
冲突产生的step:
1.创建并切换到分支feature1
2.修改readme并add和commit 内容:and simple
3.切换到分支master并修改readme 内容:& simple
4.直接merge时产生冲突,不能用Fast-Forward的方式进行merge,可以使用git status 查看产生冲突的文件
打开冲突文件可以看到git为我们列出的各个分支下不同的修改
5.在主分支上手动修改后提交
可以使用带参数的log命令查看合并情况 git log --graph --pretty=oneline --abbrev-commit
6.删除feature1分支,ok!
可以用git log --graph 查看分支合并情况
合并方式:
默认的Fst-Forward方式合并删除后会丢掉分支信息,使用--no-ff参数合并可以保留合并过的分支信息。
git merge --no-ff -m "merge with --no-ff" dev 表示将dev分支合并到当前分支并禁用Fast-Forward模式
分支策略:
master分支因该是稳定的,仅仅用来发布新版本,不在上面干活
dev分支是干活用的,不稳定的,发布新版本时把它merge到master上
每个程序员在自己的分支上干活,写好了merge到dev上!
----------lesson 05---------------
Bug分支:
当前分支dev上的工作还没完成,也不能立即提交,但还要去修改个bug?储存当前工作现场的status功能
$ git stash 保存工作现场了
现在可以修理bug了,在那个分支上修复就在那个分支上branch创建一个临时分支。
比如在master分支上修改就在它上面创建一个临时分支issue-101
git checkout master 切换到master分支
git checkout -b issue-101 创建一个临时分支issue-101
.....在issue-101分支上修复bug并提交...
git checkout master 切换到master分支上去
git merge --no-ff -m "merge bug fix 101" issue-101 以保留分支记录的形式完成合并
git branch -d issue-101 删除该分支
好了,现在可以回去干活了
git checkout dev
git status 查看当前工作区是否干净
git stash list 查看储藏的工作区信息
恢复工作区的方法有两个:
1.git stash apply 用来恢复
git stash drop 用来删除stash的储藏信息
2.git stash pop 恢复的同时把stash的信息也删除了
上两个用任何一个删除后,用git stash list 查看已经没有stash的信息了
注:可以多次stash,恢复的时候用git stash list查看,恢复到某个就用它对应的list 中的id信息
git stash apply stash@{0}
Feature分支:
接到通知,产品经理又要加功能了,可不能为了这个新特性干扰了原来已经好用的分支。
所以没添加一个新功能最好新建一个feature分支并在上面实验,成功后合并再删除该分支。
比如当前在dev分支上
git checkout -b feature-vulan 为新功能vulan的开发新建一个分支
开发完毕后提交修改
git add vulan.py
git commit -m "add feature vulan"
git checkout dev 切回到dev分支
如果老板说做的不错合并吧,那就合并分支然后删除feature分支,但他也许会说,这个功能不好,又不想要了,
那也得销毁
git branch -d feature-vulan
不过,不让轻易删,会提示出错信息,还未合并,删除了无法恢复,但可以用下面命令强制删除,只需要将-d改为-D
git branch -D feature-vulan
--------------lesson 06---------
多人协作:
你总得学会团队合作
当从远程仓库克隆时,Git自动把本地master和远程的master对应起来了,默认远程仓库的名字是orign。
git remote 查看远程仓库信息
git remote -v 查看远程仓库详细信息,有抓取和推送两种,有两种权限的才能全部看到
推送分支:
将本地分支提交到远程库
git push origin master 推送本地的master到远程
git push origin dev 推送本地的dev到远程
一般master和dev分支都需要推送到远程,bug和feature分支视情况而定
抓取分支:
多人协作时,每个人都需要向master和dev推送各自的修改
clone只会将远程的master主分支复制并关联到本地,得到远程其他分支?
git checkout -b dev origin/dev 获取远程的dev到本地,注意没有关联,Git只对master默认关联
现在可以在本地修改并提交了,然后时不时的push到远程
git push origin dev
不过要是还有人也push到了远端dev,可能有修改上的冲突,push可能失败,按Git提示先将最新的提交抓下来,在本地
解决冲突后再提交
git pull
git pull <remote> <branch> 都失败"no track information"是因为还没有和远程的该分支建立链接自然无法从分支抓取
git branch --set-upstream dev origin/dev 建立本地dev和远程dev的链接,然后抓取
git pull
然后在本地解决冲突,手动解决的方法跟以前一样,然后在本地提交后push到远程,仍使用如下命令:
git push origin dev
多人协作的步骤:
1.先试图push自己的修改到远程
2.push失败说明远程的比本地的新,用pull抓取到本地尝试合并
3.合并失败说明有冲突,
到本地解决冲突后先在本地提交
4. 合并成功或解决了冲突后push到远端
------------------lesson 07-----------
发布么某个版本时,打个标签
git checkout master 先切换到药打标签的分支上
git tag v0.1 给这个分支的当前提交打标签
git tag v0.1 commit_id 给id为commit_id的某个历史版本创建标签
git tag 查看所有标签,标签按字母顺序列出
git show v1.0 列出某个标签的信息
git tag -a tag_name -m "tag_info" 创建有说明信息的标签
用-s 还可以创建一个带pgp签名的标签,暂不介绍了
git tag -d v0.1 删除标签
以上都是在本地操作的,也可推送到远程
git push origin v0.1 将一个标签推送到远程
git push origin --tags 一次将所有标签推送到远程
删除远程上的标签药分两步:
git tad -d v0.1 先删除本地标签
git push origin :refs/tags/v0.1 然后用此命令从远程删除,可以从GitHub上验证是否成功删除
-------------lesson 08--------
使用GitHub:
可以用自己的帐号Fork任意开源仓库到个人的GitHub上。
自己拥有自己仓库的读写权限
如果够牛的话,可以推送自己的代码到开源库上,不过人家是否接收你的pull reguest就不一定了
1.访问开源项目的主页,将开源仓库fork到自己的GitHub,比如有名的
https://github.com/twbs/bootstrap
2.从自己的帐号下克隆到本地$ git@github.com:maoranbian/bootstrap.git
3.可以自己干活了,然后把自己的结果推送到自己的GitHub仓库
4.如果想试试运气,那就把自己的成果bug或是新功能pull request吧
aaarticlea/png;base64,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" alt="" data-media-type="image" />
自定义Git:
1. 让Git显示颜色:
git config --global color.ui true
2. 让Git忽略某些文件,保存在本地,不提交Git也不会出现提示:
最后,这个配置文件本身也是要加入到Git版本库中的。
忽略文件的原则是:
- 忽略操作系统自动生成的文件,比如缩略图等;
- 忽略编译生成的中间文件、可执行文件等,也就是如果一个文件是通过另一个文件自动生成的,那自动生成的文件就没必要放进版本库,比如Java编译产生的.class文件;
- 忽略你自己的带有敏感信息的配置文件,比如存放口令的配置文件。
3. 为命令配置别名:
一行命令就可以,比如要让git st 表git status,可以用如下命令设置:
$ gti config --global alias.st status
习惯性的简写比如co表示checkout,ci表示commit,br表示branch
命令中饿global表示是全局参数,表示对这台电脑的所有Git仓库都适用。
还可以对复杂点的命令起别名,比如撤销暂存区修改的reset HEAD命令可以用设置别名unstage,方法如下:
$git config --global alias.unstage "reset HEAD"
配置一个git last让它显示最后一次的信息提交
$git congig --global alias.last "log -l"
有机会你可以试试下面的配置是被哪位牛人配置成什么样子了?
$git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"
4. 什么?你想删除别名?好吧,带你去找配置文件
在配置别名时如果不加--global就只对当前仓库起作用,每个仓库的配置文件都放在.git/config中,别名的设置都在[alias]名下,觉得哪个不顺眼删除它所在的行,别名就不起作用了,当然,也可以直接在这个地方配置别名,那就是仅针对这个仓库的了。
5. 搭建自己的Git服务器私用:
不想开源自己的代码的话,就自己在本地搭建吧,保护代码还不用交费
你需要有一台运行Linux系统的电脑,并且有sudo权限,搭建开始:
step1:安装Git
$sudo apt install git
step2: 创建一个用户运行Git服务
$sudo adduser git
step3: 创建证书登陆
收集所有需要登录的用户的公钥,就是他们自己的id_rsa.pub文件,把所有公钥导入到/home/git/.ssh/authorized_keys文件里,一行一个。
step4: 初始化Git仓库
在git仓库的目录下执行如下命令创建一个裸仓库sample.git:
$ sudo git init --bare sample.git
裸仓库没有工作区,因为只是为了共享,把owner改为git:
$ sudo chown -R git:git sample.git
step5:禁用shell命令
出于安全考虑,第二步创建的git用户不允许登录shell,这可以通过编辑/etc/passwd文件完成。找到类似下面的一行:
git:x:1001:1001:,,,:/home/git:/bin/bash
改为:
git:x:1001:1001:,,,:/home/git:/usr/bin/git-shell
这样,git用户可以正常通过ssh使用git,但无法登录shell,因为我们为git用户指定的git-shell每次一登录就自动退出。
step6:使用git clone命令克隆远程仓库
在小伙伴们各自的电脑上运行克隆命令就可以啦:
$ git clone git@server:/srv/sample.git
然后就是推送什么的了
其他的,要方便管理公钥,用Gitosis;要像SVN那样变态地控制权限,用Gitolite。
- javascript - 浏览TOM大叔博客的学习笔记
part1 ---------------------------------------------------------------------------------------------- ...
- js便签笔记(12)——浏览TOM大叔博客的学习笔记 part2
1. 前言 昨天写了<js便签笔记(11)——浏览TOM大叔博客的学习笔记 part1>,简单记录了几个问题.part1的重点还是在于最后那个循环创建函数的问题,也就是多个子函数公用一个闭 ...
- hexo博客的学习笔记
这篇文章主要的作用是作为 .md文件打开,内部的格式为一个初学者对hexo以及markdown语法运用的笔记 1.Hexo的写文格式 最开始为文章的属性部分,以三横杠-开始,-结束.里面记录了文章的标 ...
- 廖雪峰老师博客学习《通过生成器generator生成列表式杨辉三角》
说明:这是我接触生成器概念后,自己对它的理解,可能比较表面,没深入理解,也可能有错误.后续校正错误认知,将有关generator作为一个tag了! 希望以后能活用. 先贴出自己写的triangles( ...
- 我的第一篇博客----LCS学习笔记
LCS引论 在这篇博文中,博主要给大家讲一个算法----最长公共子序列(LCS)算法.我最初接触这个算法是在高中学信息学竞赛的时候.那时候花了好长时间理解这个算法.老师经常说,这种算法是母算法,即从这 ...
- js便签笔记(11)——浏览TOM大叔博客的学习笔记 part1
1. 前言 这两天看了一下TOM大叔的<深入理解js系列>中的基础部分,根据自己的实际情况,做了读书笔记,记录了部分容易绊脚的问题.写篇文章,供大家分享. 2. 关于HTMLCollect ...
- hexo在git上搭建个人博客
公司实习第一天接到的任务是:搭建一个基于Nodejs的开源项目的开发环境,接到任务时以为不是很困难,后来才知道该项目已于去年被废弃,搭配环境的时候遇到了不少问题,折腾了两天还是没有最终完成... 不过 ...
- 使用Coding.net+Hexo+node.js+git来搭建个人博客
使用Coding.net来搭建基于Hexo的博客 一.准备工作 什么是Coding.net Coding可以说,就是国产的Github,但是,有一个功能使它似乎超越了GitHub-那就是 Web ID ...
- Git+Hexo搭建个人博客详细过程
通过Git+Hexo搭建的个人博客地址:https://liangh.top/ 1.安装Node.js.配置好Node.js环境.安装Git和配置好Git环境,打开cmd命令行,成功界面如下 2.安装 ...
随机推荐
- C++关键字之static
一.面向过程设计中的static 1.静态全局变量 在全局变量前,加上关键字static,该变量就被定义成为一个静态全局变量.我们先举一个静态全局变量的例子,如下: [cpp] #include& ...
- wx.Frame
wx.Frame A frame is a window whose size and position can (usually) be changed by the user. It usuall ...
- C# DataTable几个常用的查询表达式【转】
DataTable dt = GetDetails().Tables[0]; //获取可用的DataTable // var m = dt.AsEnumerable().Last ...
- SDUT OJ 2783 小P寻宝记
#include<iostream> #include<memory.h> #define N 10020 using namespace std; int dp[N],pi[ ...
- C#中使用日志类,添加dll时出现错误
警告 1 未能解析引用的程序集 “log4net, Version=1.2.10.0, Culture=neutral, PublicKeyToken=1b44e1d426115821, proces ...
- 简单的CSS网页布局--一二列布局
1.一列布局 (一)一列自适应 自适应浏览器,随着浏览器的拉伸而变化,一般宽度采用百分比的写法,很简<!DOCTYPE html> <html> <head lang=& ...
- JavaScript习题
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding= ...
- php7 install memcached extension
#download source code package from git $ git clone https://github.com/php-memcached-dev/php-memcache ...
- leetcode Merge Two Sorted Lists python
# Definition for singly-linked list. # class ListNode(object): # def __init__(self, x): # self.val = ...
- Linux学习之服务器端口查看的方法
1.用netstat查看: [grid@rac121 admin]$ netstat -anp | grep oracle (Not all processes could be identified ...