当前位置: 首页 > 编程日记 > 正文

Git note


feat:新功能(feature)
fix:修补bug
docs:文档(documentation)
style: 格式(不影响代码运行的变动)注意不是 css 修改
refactor:重构(即不是新增功能,也不是修改bug的代码变动)
test:增加测试
chore:构建过程或辅助工具的变动
scope: commit 影响的范围, 比如: route, component, utils, build...
footer: 一些备注, 通常是 BREAKING CHANGE 或修复的 bug 的链接.

init_add_status_commit_push

基础概念

已提交(committed):已提交表示该文件已经被安全地保存在本地数据库中了;

已修改(modified):已修改表示修改了某个文件,但还没有提交保存;

已暂存(staged):已暂存表示把已修改的文件放在下次提交时要保存的清单中。

初次运行基本配置

用户信息

$ git config --global user.name "Teaism"
$ git config --global user.email chenliangf1223@sina.com

配置文本编辑器

$ git config --global core.editor emacs

查看配置信息

$ git config --list

查阅某个环境变量的设定

$ git config user.name

删除某个配置项

$ git config (--local、--global、--system) --unset user.name

Git使用命令

获取帮助

$ git help config

初始化Git仓库

$ git init

从现有仓库克隆

$ git clone git://github.com/schacon/grit.git NewFileName

添加文件到仓库

$ git add Files

创建.ignore文件

$ touch .gitignore

删除文件(禁用:会从工作目录和暂缓中同时删除。)

$ git rm Files

$ git add -A (推荐)
它会把我们未通过 git rm 删除的文件全部stage

重命名文件

$ git mv file_from file_to

检查当前文件状态

$ git status

提交已暂存区(stage)的内容

$ git commit -m '提交说明'

查看日志

$ git log (--pretty=oneline)

** 查看文件差别

$ git diff #是工作区(work dict)和暂存区(stage)的比较
$ git diff --cached #是暂存区(stage)和版本库的比较

$ git diff HEAD -- Files #工作区和版本库的区别

** 撤销修改
[https://segmentfault.com/a/1190000007070302]
tips:命令 git checkout –readme.txt 意思就是,把readme.txt文件在工作区做的修改全部撤销,这里有2种情况,如下:
1) readme.txt自动修改后,还没有放到暂存区,使用 撤销修改就回到和版本库一模一样的状态。
2) 另外一种是readme.txt已经放入暂存区了,接着又作了修改,撤销修改就回到添加暂存区后的状态。

工作区的代码想撤销 ( Files 自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;)

$ git checkout -- Files (git checkout -- . 撤销所有文件,注意 ' . ')

add到暂存区的代码想撤销 (Files 已添加到暂存区后,又修改,现在,撤销修改就reset回到添加到暂存区后的状态。再checkout就是恢复到 版本库一样的)

$ git reset HEAD Filesname (git reset HEAD . 将所有文件)

$ git checkout -- Files

删除文件恢复
删除文件 $ git rm [Filenames] or rm [Filenames]
只要没有commit之前,如果我想在版本库中恢复此文件,可以使用如下命令:
$ git checkout — b.txt

版本回退(未提交到远程可回退,否则可本地回退再push到远程覆盖)

notes: reset指针直接指向上次提交(慎用),revert 是重新提交(推荐)。
$ git reflog OR $ git log --pretty=oneline (查看提交历史)。

$ git reset --hard [hash] (推荐这个,hash) OR $ git reset --hard HEAD@{$} ($向前回退几个版本)

穿梭前,用git log可以查看提交历史,以便确定要回退到哪个版本。

要重返未来,用git reflog查看命令历史,以便确定要回到未来的哪个版本。

从暂缓区删除文件(但工作区代码并未删除)

$ git rm --cached

GIT重置命令

reset命令可以改变.git/refs/heads/master下分支的引用,而不是永远指向最新的提交ID。

reflog(.git/logs/refs/heads/master)命令恢复

重置引用后提交历史信息会丢失,这时可以使用reflog命令查看操作日志,以便进行恢复操作

git reflog show master |head -5 显示master分之最近五次操作日志

git reflog -1 显示HEAD分支最近一次操作日志

reset命令的两种用法

用法一:git reset[-q][<commit>][--]<paths>

用法二:git reset[--soft|--mixed|--hard|--merge|--keep][-q][<commit>]

第一种用法不会重置引用和工作区,而是用commit下的文件替换暂存区文件,相当于撤销git add 的操作,其中commit可以省略,默认为HEAD

第二种则会重置引用,但会根据不同的参数从而 影响 工作区或者暂存区,其中commit也可以省略,默认为HEAD

使用参数--hard 工作区,引用、暂存区全部替换为commit

使用参数--soft 只更改引用,工作区和暂存区不影响
使用参数--mixed(不写默认) 只更改引用和暂存区,不影响工作区

git 分支

创建并切换到新的分支

$ git checkout -b
相当于:
$ git branch (新建分支)
$ git checkout (切换分支)

查看分支列表

$ git Branch

合并分支

合并Master 和 Branch1 分支:

$ git checkout Master
$ git merge Branch1

合并分支时同一文件同一部分冲突

此时需要到文件中手动保留需要的部分,然后add--commit。

删除分支( D 表示强制删除)

$ git branch -d ...

$ git branch -D ...

查看分支的合并情况

$ git log (--graph --pretty=oneline --abbrev-commit)

禁用快捷合并分支

$ git merge --no-ff -m "comments"

查看所有分支(分支颜色区分:白色-本地,绿色-当前,红色-远程)
$ git branch -a
切换远程分支
$ git checkout remotes/origin/master
删除远程分支
$ git branch -r -d
$git push origin -d
拉取远程分支并创建为本地分支
$ git fetch origin dev:dev

修复Bug分支

Explain:

修复bug时,我们会通过创建新的bug分支进行修复,然后合并,最后删除;

当手头工作没有完成时,先把工作现场git stash一下,然后去修复bug,修复后,再git stash pop,回到工作现场。

steps: (以master,dev,bug01分支为例):

储存dev当前工作区: $ git stash
切换到master分支上:
新建并切换分支bug01: $ git checkout -b
在新的bug01分支上修复,记得提交;
把bug01分支合并到master分支上,推荐'禁用快捷合并'方式:$ git merge --no-ff -m "comments" 到此bug修复成功。下面是回到先前的工作区:
切换到dev分支上
查看先前“储存‘的工作区: $ git stash list
恢复到指定处: $ git stash apply stash@{$}
成功!

$ git stash //把当前工作现场“储藏”起来,等以后恢复现场后继续工作
$ git stash list //列出stash中的所有暂存的内容

方式一:git stash apply //仅恢复,;
$ git stash apply stash@{$} //还可以指定恢复哪一个,stash内容并不删除
$ git stash drop //来删除,stash(但是不确定删除哪个??)

方式二:git stash pop //恢复的同时把stash内容也删了(推荐)

参考: http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/00137602359178794d966923e5c4134bc8bf98dfb03aea3000

bug排查

$ git bisect

打标签

查看已有标签列表

$ git tag

新增标签

$ git tag -a v1.2.0 -m 'my version 1.2.0'

后期加注标签

$ git tag -a v1.2.0 9fceb02 (9fceb02为提交时校验和前几位)

推动单个标签到远程服务器

$ git push origin v1.2.0

推动所有标签到远程服务器

$ git push origin --tags

退出vim编辑器:双击 D ,按了ESC后输入命令 :wq!

修改后 保存: ESC :wq 回车键
修改后 不保存:ESC :q 回车键

单单 git diff 不过是显示还没有暂存起来的改动,若要看已经暂存起来的文件和上次提交时的快照之间的差异,可以用 git diff --staged;

Git远程关联管理

**远程操作的第一步,最好从远程主机克隆一个版本库: git clone. 不然容易出现 not shell access

clone-pull-fetch-push

测试远程仓库链接是否成功

$ ssh -T git@github.com

测试443端口是否可用

$ ssh -T -p 443 git@ssh.github.com

添加远程仓库

$ git remote add origin git@github.com:Teaism/gitremote.git

展示远程仓库信息

$ git remote show mcvideo(别名)

查看当前远程仓库

$ git remote -v

推送到远程仓库

$ git pull origin master/dev (第一次推送之前需拉取远程的)

$ git push -u origin master

$ git push origin master (以后的推送)

**代码合并【注:pull=fetch+merge(拉取并合并=拉取+合并)](最好不要直接用pull,而是分开用) 。

$ git pull (mcvideo master) 无括号里表示拉取所有并合并

$ git fetch (mcvideo master) 无括号里表示拉取所有

$ git merge dev (合并dev到当前分支)

直接从远程origin的dev分支创建到本地dev来:

$ git checkout –b dev origin/dev

$ git pull origin master/dev/test 从远程仓库拉取指定分支
tips: git pull如果失败了,原因是没有指定本地dev分支与远程origin/dev分支的链接,根据提示,设置dev和origin/dev的链接:
$ git branch --set-upstream dev origin/dev (// 本地远程分支关联: git branch --set-upstream-to=origin/ 如设置当前分支,第二个参数可省略,;)
origin: 如未指定,表示远程仓库的别名
合并pull两个不同的项目:
报错:fatal: refusing to merge unrelated histories
解决方法:git pull origin master --allow-unrelated-histories

冲突:
1、放弃工作区修改,
本地仓库代码完全覆盖本地工作区间,具体指令如下:
$ git checkout head .
(注意: 别遗漏 "head" 后的 " ." )
然后更新远程仓库的代码就不会出现冲突了:
$ git pull
2、解决冲突后提交本地修改
$ git stash
$ git stash save "这些是注释啦"
$ git pull
$ git stash pop
手工解决冲突,
然后add-commit-push

删除远程分支
$ git push origin --delete Branchname

远程仓库的重命名和删除

$ git remote rename pb paul

$ git remote rm paul

从commit里取消去某个文件夹的跟踪

git rm -r --cached path_to_your_folder/

## 合并几个commit

[http://zerodie.github.io/blog/2012/01/19/git-rebase-i/]

git merge 和 git rebase 的区别: [http://blog.csdn.net/wh_19910525/article/details/7554489]

$ git rebase -i commit-hash(不改变的那个)
进入vim
pick 的意思是要会执行这个 commit (第二新提交)
squash 的意思是这个 commit 会被合并到前一个commit (最新提交,合并到第二新提交)

Esc:wq ,保存并退出。成功。
git log --pretty=oneline 查看结果。
如操作错误随时终止 $ git rebase --abort,会回到未开始合并之前的状态。

git pull # 抓取远程仓库所有分支更新并合并到本地

git pull --no-ff # 抓取远程仓库所有分支更新并合并到本地,不要快进合并

git fetch origin # 抓取远程仓库更新

git merge origin/master # 将远程主分支合并到本地当前分支

git co --track origin/branch # 跟踪某个远程分支创建相应的本地分支

git co -b origin/ # 基于远程分支创建本地分支,功能同上

git push # push所有分支

git push origin master # 将本地主分支推到远程主分支

git push -u origin master # 将本地主分支推到远程(如无远程主分支则创建,用于初始化远程仓库)

git push origin # 创建远程分支, origin是远程仓库名

git push origin : # 创建远程分支

git push origin : #先删除本地分支(git br -d ),然后再push删除远程分支

Git远程仓库管理

GitHub

git remote -v # 查看远程服务器地址和仓库名称

git remote show origin # 查看远程服务器仓库状态

git remote add origin git@ github:robbin/robbin_site.git # 添加远程仓库地址

git remote set-url origin git@ github.com:robbin/robbin_site.git # 设置远程仓库地址(用于修改远程仓库地址) git remote rm # 删除远程仓库

创建远程仓库

git clone --bare robbin_site robbin_site.git # 用带版本的项目创建纯版本仓库

scp -r my_project.git git@ git.csdn.net:~ # 将纯仓库上传到服务器上

mkdir robbin_site.git && cd robbin_site.git && git --bare init # 在服务器创建纯仓库

git remote add origin git@ github.com:robbin/robbin_site.git # 设置远程仓库地址

git push -u origin master # 客户端首次提交

git push -u origin develop # 首次将本地develop分支提交到远程develop分支,并且track

git remote set-head origin master # 设置远程仓库的HEAD指向master分支

也可以命令设置跟踪远程库和本地库

git branch --set-upstream master origin/master

git branch --set-upstream develop origin/develop

参考:[http://www.cnblogs.com/cspku/articles/Git_cmds.html]

[http://shaofan.org/git/]

转载于:https://www.cnblogs.com/afang/p/7852034.html

相关文章:

说客是一种俗文化

说客是一种俗文化阿祥中国移动旗下的139.com社区改版,没有张扬,也没有滥发广告,还是引起了业内人士的广泛减少。为什么?以笔者之见,这个改版后的社区打出“说客”这张牌,是互联网文化的一个全新的创意&…

leetcode 203 Remove Linked List Elements

Remove all elements from a linked list of integers that have valueval. ExampleGiven: 1 --> 2 --> 6 --> 3 --> 4 --> 5 --> 6, val 6Return: 1 --> 2 --> 3 --> 4 --> 5 我的解法: // Linklist.cpp …

eclipse实用快捷键

eclipse的快捷键非常的多,全部记录一遍也不利于查看,记录一些比较实用的更加方便。 ctrl / 注释单行/取消注释 ctrl Z 回退一步 ctrl Y (回退后)前一步 ctrl S 保存 ctrl D 删除行 alt / 补全提示 ctrl …

集合 泛型 迭代器

什么是集合 集合与数组的区别 数组的长度是固定的,集合的长度是可变的数组中可以存储任何类型的元素(基本类型和引用类型),集合只能存储引用类型的。 集合 在java中提供了很多的集合,因为用户要求存储不同接口的数据…

《监控》再起风云,连同创作中的《监控2》成功牵手影视公司

“监控”,辞海上的解释为:监测并进行控制。 “监控”,百度百科解释为:监控,职场谍战小说。 从2个月内超过230万人阅读的天涯热帖,到上市两月即获重印的畅销图书,神秘作者搏击带着他的《监控》在…

跟我学交换机配置(四)

以下内容摘自笔者最新图书《Cisco/H3C交换机配置与管理完全手册》。本书在51CTO上的样章试读地址为:http://book.51cto.com/art/200908/142118.htm 8.5.4 创建PVLAN 在IOS和CatOS系统交换机中都可以配置PVLAN,所以下面也分别予以介绍。 1. IOS系统交换机…

使用nc传输文件和目录【转】

方法1,传输文件演示(先启动接收命令) 使用nc传输文件还是比较方便的,因为不用scp和rsync那种输入密码的操作了把A机器上的一个rpm文件发送到B机器上需注意操作次序,receiver先侦听端口,sender向receiver所在…

假如有Thread1、Thread2、ThreaD3、Thread4四条线程分别统计C、D、E、F四个盘的大小,所有线程都统计完毕交给Thread5线程去做汇总,应当如何实现?...

有两种方法: 第一种方法: 一般情况,我们实现多线程都是Thread或者Runnable(后者比较多),但是,这两种都是没返回值的,所以我们需要使用callable(有返回值的多线程)和future(获得线程的返回值)来实现了。 /**…

ORA-00907:缺少右括号

在创建以下表的时候出现ORA-00907:缺少右括号的错误,最后发现是字符串类型写错了,VARCHAR2写成了VARCAHR2, /**//* DBMS name: ORACLE Version 9i2 *//* Created on: 2010-4-23 12:28:27 …

Java Web项目第二次总结

学生管理系统 问题 jQuery 不熟悉El需要复习servlet的内置对象 新认识的知识 利用servlet的 Session对象实现权限的验证。它的作用是:只能通过登录后才能进入主界面,否则不能进入。没有加权限验证前是可以根据页面的完整路径进入主界面,可以不输入密…

软件项目中的需求分析具体方法探讨之一

这家单位,我进去没多久,满打满算也就刚两月多一周而已。我也不是开发部的人,但是,看到了一些事情,纯为有感而发。领导想做个CRM,于是,开发部的人写了,当然,正式的需求分析…

portscaner 多线程、多协程并发端口扫描

import socket,time,re,sys,os,threading import gevent from gevent import monkey monkey.patch_all()socket.setdefaulttimeout(2)#该方法用来处理用户数据的port范围,并计算范围内的port,将其添加到列表中,将列表返回 def handle_port(in…

POJ 2828 Buy Tickets | 线段树的喵用

题意: 给你n次插队操作,每次两个数,pos,w,意为在pos后插入一个权值为w的数; 最后输出1~n的权值 题解: 首先可以发现,最后一次插入的位置是准确的位置 所以这个就变成了若干个子问题, 所以用线段树维护一下每个区间剩余多少位置可选 对于一个pos 如果左儿子的剩余超过当前位置,就…

Ext结合DWR的关键代码(运行成功的DWRProxy)

关键代码如下:Store为:var ds new Ext.data.Store({ proxy: new Ext.data.DWRProxy({ callback: Folder.getMessageList, params: { start: 0, limit: PAGE_SIZE } }), // proxy: new…

serlvet 九大内置对象

隐式对象 说明 request 转译后对应HttpServletRequest/ServletRequest对象 response 转译后对应HttpServletRespons/ServletResponse对象 session 转译后对应HttpSession对象 application 转译后对应ServletContext对象 out 转译后对应JspWriter对象,其…

网路游侠:某软件版WEB应用防火墙试用

去年的这个时候,游侠(www.youxia.org)认为WAF都是硬件的,后来在网上看到这个在国内做的不错的牌子。居然是软件的WAF,这样的话,一些服务器在机房托管的用户就特别需要这样的产品,因为1U的设备在电信机房的托管费用都有…

P2172 [国家集训队]部落战争 二分图最小不相交路径覆盖

二分图最小不相交路径覆盖 #include<bits/stdc.h> using namespace std; const int MAXN 5550; const int MAXM 1000005; const int INF 1000000050; int Head[MAXN], cur[MAXN], lev[MAXN], to[MAXM << 1], nxt[MAXM << 1], f[MAXM << 1], ed 1, …

IO流 字符流 字节流 缓冲流 文件的复制

IO流 IO概述 IO流就是一个管道&#xff0c;是用来在设备之间传输数据 input&#xff1a;相对于内存/程序 往进走输入流 output&#xff1a;相对于内存/程序 往硬盘写入 分类 根据数据进出方式 1、输出流&#xff1a; FileWriter 字符输出流BufferedWriter 字符缓冲输出…

强烈推荐:240多个jQuery插件

http://www.cnblogs.com/Terrylee/archive/2007/12/09/the-ultimate-jquery-plugin-list.html转载于:https://www.cnblogs.com/HughTan/archive/2010/05/14/1735376.html

FreeBSD Ports加速的方法

使用代理。 在/etc/make.conf中设置&#xff1a;FETCH_ENV "HTTP_PROXYIP[:端口]"如果需要&#xff0c;在FETCH_ENV值后面加入空格&#xff0c;HTTP_PROXY_AUTHbasic:*:user:password利用其他机器下载的文件... 首先&#xff0c;请确保2台机器cvsup的一致&#xff0…

AngularJS ng-if使用

示例中&#xff0c;根据ng-if指令显示不同任务状态&#xff0c;以及判断任务是否可以操作 <div ng-app"NgifDemoApp" ng-controller"NgifDemoContrl as vm"><h1>任务列表</h1><table class"table"><thead><tr&…

一、Tableau基础

有关函数的官方文档&#xff1a;https://onlinehelp.tableau.com/current/pro/desktop/zh-cn/functions_functions_string.htm 注意事项&#xff1a; 1.记录数:是Tableau自动给每行观测值赋值为1。 2.维度的字段&#xff0c;是不能用于计算的&#xff0c;若是要用于计算&#x…

关于OGNL表达式中的%,$,#

OGNL表达式非常强大&#xff5e;其中#、%、$这三个符号在OGNL表达式中经常出现&#xff0c;而这三种符号也是开发者不容易掌握和理解的部分&#xff0c;要认真区分。1&#xff0e;#符号的用途一般有三种。 1)访问非根对象属性&#xff0c;例如示例中的#session.msg表达式&#…

JavaWeb项目第三次总结_成绩查询的实现

查询图书的功能实现 如何知道浏览器往服务器传入的参数 1、在编写好查询页面后&#xff0c;使用火狐浏览器的friebug &#xff08;全部—>POST—>参数&#xff09; 2、编写GradeListServlet&#xff0c;重写doGet&#xff08;&#xff09;和doPOST&#xff08;&#x…

cisco路由交换系统测试命令

路由交换系统测试命令通用测试命令&#xff1a;ping X.X.X.X &#xff1a;标准ping命令&#xff0c;用于测试设备间的物理连通性ping &#xff1a;扩展ping命令&#xff0c;也用于设备间的物理连通性&#xff0c;扩展ping命令还支持灵活定义ping命令的参数&#xff0c;比…

jquery下拉菜单

自己写的一个菜单(因为是初学 不知道能不能算无限级)jquery $(document).ready(function(){ $("ul li").hover(function(){ $(this).find("ul:first").show();//鼠标滑过查找li下面的第一个ul然后显示&#xff1b;},function(){ …

MongoDB update修改器: 针对Fields的$修改器 $inc $set $unset

MongoDB update修改器: $inc $set $unset $push $pull $pop 针对Fields的$修改器 $set&#xff1a; { $set: { key: value } } $set:{"gender":"男"} 解释: $set 是update时的关键字,表示我要设置gender属性的值为"男" 如果该条Documents没有gen…

都是些什么人!

都是些什么人&#xff01;转载于:https://www.cnblogs.com/liyugeng/p/7877615.html

IO流(二)转换流、序列化、commons-IO框架

转换流 介于字符流和字节流之间的流 字节流与字节流相互转换 OutputStreamWriter 输出流&#xff0c;按照指定的字符集编码&#xff0c;把字符流转化成字节数据 编码&#xff1a;把字符数据转换成字节数据&#xff1b; 解码&#xff1a;把字节数据转换成字符数据 二进制数据—&…

Http之Get/Post请求区别

今天在网上看了一些关于http 协议中get 和Post的文章。在此做一个总结&#xff0c;当是做一个笔记吧。 一、什么是HTTP-GET和HTTP-POST HTTP-GET和HTTP-POST是使用HTTP的标准协议动词&#xff0c;用于编码和传送变量名/变量值对参数&#xff0c;并且使用相关的请求语义。每个HT…