自由的程序员

生活是一场马拉松,学习亦是如此


  • 首页

  • 归档

  • 分类

  • 标签

  • 关于

Java-获取当前是星期几的2种方式

发表于 2016-10-05   |   分类于 Java , 开发知识 , Other

方式1:
使用Calendar类

 /**
 * 获取当前日期是星期几<br>
 *
 * @param dt
 * @return 当前日期是星期几
 */
public static String getWeekOfDate(Date dt) {
    String[] weekDays = {"星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"};
    Calendar cal = Calendar.getInstance();
    cal.setTime(dt);
    int w = cal.get(Calendar.DAY_OF_WEEK) - 1;
    if (w < 0)
        w = 0;
    return weekDays[w];
}

方式2:
使用SimpleDateFormat格式化日期

Date date=new Date();
SimpleDateFormat dateFm = new SimpleDateFormat("EEEE");
dateFm.format(date);

注:格式化字符串存在区分大小写
对于创建SimpleDateFormat传入的参数:EEEE代表星期,如“星期四”;MMMM代表中文月份,如“十一月”;MM代表月份,如“11”;
yyyy代表年份,如“2010”;dd代表天,如“25”

Android-string.xml中添加特殊字符,ASCII码常用列表(持续更新)

发表于 2016-10-05   |   分类于 Android , 开发知识 , Other

需求:

项目中要再string.xml中显示特殊字符。

使用方式:

在string.xml中使用时,ASCII码后边要拼接“;”,例如:“&#32”+“;”,就会显示空格。

常用列表:

ASCII码 符号 备注
&#032 空格
! !
" “ xml中需要在前面加入\
# #
$ $
% %
& &
' ‘
( (
) )
* *
+ +
, ,
- -
. .
/ /
: :
; ;
< <
= =
> >
? ?
@ @
&#091 [
&#092 \
&#093 ]
&#094 ^
&#095 _
&#096 `
&#123 {
&#124 竖直线
&#125 }
&#126 ~
&#160 空格 这边是空格,在xml首字符中不会被忽略
&#161 ¡
&#162 ¢
&#163 £
&#164 ¤
&#165 ¥
&#166 ¦
&#167 §
&#168 ¨
© ©
&#170 ª
&#171 «
&#172 ¬
&#173 空格
&#174 ®
&#175 ¯
&#176 °
&#177 ±
&#178 ²
&#179 ³
&#180 ´
&#181 µ
&#182 ¶
&#183 •
&#184 ¸
&#185 ¹
&#186 º
&#187 »
&#188 ¼
&#189 ½
&#190 ¾

Android-Touch事件处理机制,解决滑动时间冲突

发表于 2016-10-05   |   分类于 Android , 开发知识 , Other

Android系统中的每个View的子类都具有下面三个和TouchEvent处理密切相关的方法:

  1. public boolean dispatchTouchEvent(MotionEvent ev)
    这个方法用来分发TouchEvent

  2. public boolean onInterceptTouchEvent(MotionEvent ev)
    这个方法用来拦截TouchEvent

  3. public boolean onTouchEvent(MotionEvent ev)
    这个方法用来处理TouchEvent

当TouchEvent发生时,首先Activity将TouchEvent传递给最顶层的View, TouchEvent最先到达最顶层 view 的 dispatchTouchEvent ,然后由 dispatchTouchEvent 方法进行分发,如果dispatchTouchEvent返回true ,则交给这个view的onTouchEvent处理,如果dispatchTouchEvent返回 false ,则交给这个 view 的 interceptTouchEvent 方法来决定是否要拦截这个事件,如果 interceptTouchEvent 返回 true ,也就是拦截掉了,则交给它的 onTouchEvent 来处理,如果 interceptTouchEvent 返回 false ,那么就传递给子 view ,由子 view 的 dispatchTouchEvent 再来开始这个事件的分发。如果事件传递到某一层的子 view 的 onTouchEvent 上了,这个方法返回了 false ,那么这个事件会从这个 view 往上传递,都是 onTouchEvent 来接收。而如果传递到最上面的 onTouchEvent 也返回 false 的话,这个事件就会“消失”,而且接收不到下一次事件。

让子先处理的方法是从写父的onInterceptTouchEvent事件并返回false

 public boolean onInterceptTouchEvent(MotionEvent ev) {        
    return false;   
}

Ps:参考资料

  1. Android View事件机制 21问21答

Android-string.xml动态替换文本

发表于 2016-10-04   |   分类于 Android , 开发知识 , Other

需求:我是做Android开发的,工作3年了。这段字符串中,Android和3需要动态替换。

在string.xml中定义:

<string name="demo">我是做%1$s开发的,工作%2$d了。</string>

在程序中使用:

String input = getResources().getString(R.string.demo);
String ouput = String.format(input, "Android", 3);

输入出结果:我是做Android开发的,工作3年了。

解释:

%1$s:1是指位置1,小写s是指定替换类型为字符串。
%2$d:2是指位置2,小写d是指定替换类型为整数。
其他的类似,灵活运用即可。

Android-adb常用命令整理(持续更新)

发表于 2016-10-04   |   分类于 Android , 开发知识 , Other

1、显示当前连接的设备

$ adb devices

2、如果要对设备进行有特殊权限的操作,就需要有root权限

$ adb root

3、如果要手机上安装apk

$ adb install xxx.apk

4、重新安装某apk

$ adb install -r xxx.apk

5、卸载某apk

$ adb uninstall <apk的主包名>

6、查看手机上运行日志

$ adb logcat

7、启动activity

$ adb shell am start PACKAGE_NAME/ACTIVITY_IN_PACKAGE  
或者
$ adb shell am start PACKAGE_NAME/FULLY_QUALIFIED_ACTIVITY

8、A为手机路径,B为电脑路径,意思为:把文件从手机中复制到电脑上

$ adb pull 

9、A为手机路径,B为电脑路径,意思为:把文件从电脑复制到手机上

$ adb push 

10、进入手机的超级终端Terminal

$ adb shell 

11、重新挂载文件系统

$ adb remount 

12、重启手机

$ adb reboot

13、重启到Recovery界面

$ adb reboot recovery 

14、重启到bootloader界面

$ adb reboot bootloader

15、获取设备的序列号

$ adb get-serialno

16、查询adb的版本号

$ adb version

17、从设备中导出文件

$ adb pull <文件路径> <新生成的文件名>

Ps:参考资料

  1. ADB基本的命令讲解

Android-避免App启动黑白屏闪现的2种方式

发表于 2016-10-03   |   分类于 Android , 开发知识 , Other

App每次启动程序都会闪一下黑屏或白屏(取决于使用的全局样式),因为启动Activity的时候,需要执行完onCreate和onResume才会显示界面。也就是说需要处理一些数据后,才会显示,就算onCreate方法里什么不做,仍然会闪一下黑屏,因为初始化解析界面时需要一定时间。

1、自定义Theme

<style name="Theme.AppStartLoad" parent="android:Theme">    
    <item name="android:windowBackground">@drawable/ic_splash</item>    
    <item name="android:windowNoTitle">true</item>    
</style> 

2、设置透明Theme

<style name="Theme.AppStartLoadTranslucent" parent="android:Theme">    
    <item name="android:windowIsTranslucent">true</item>   
    <item name="android:windowNoTitle">true</item>    
</style> 

常用正则表达式收集(持续更新)

发表于 2016-10-03   |   分类于 其它 , 正则表达式

1、校验密码强度

密码的强度必须是包含大小写字母和数字的组合,不能使用特殊字符,长度在8-10之间。

^(?=.*\\d)(?=.*[a-z])(?=.*[A-Z]).{8,10}$

2、校验中文

字符串仅能是中文。

^[\\u4e00-\\u9fa5]{0,}$

3、由数组、26个英文字母或下划线组成的字符串

^\\w+$

4、校验e-mail地址

[\\w!#$%&'*+/=?^_`{|}~-]+(?:\\.[\\w!#$%&'*+/=?^_`{|}~-]+)*@(?:[\\w](?:[\\w-]*[\\w])?\\.)+[\\w](?:[\\w-]*[\\w])?

5、校验身份证号码

15位:

^[1-9]\\d{7}((0\\d)|(1[0-2]))(([0|1|2]\\d)|3[0-1])\\d{3}$

18位:

^[1-9]\\d{5}[1-9]\\d{3}((0\\d)|(1[0-2]))(([0|1|2]\\d)|3[0-1])\\d{3}([0-9]|X)$

6、校验日期

“yyyy-mm-dd“ 格式的日期校验,已考虑平闰年。

^(?:(?!0000)[0-9]{4}-(?:(?:0[1-9]|1[0-2])-(?:0[1-9]|1[0-9]|2[0-8])|(?:0[13-9]|1[0-2])-(?:29|30)|(?:0[13578]|1[02])-31)|(?:[0-9]{2}(?:0[48]|[2468][048]|[13579][26])|(?:0[48]|[2468][048]|[13579][26])00)-02-29)$

7、校验金额

金额校验,精确到2位小数。

^[0-9]+(.[0-9]{2})?$

8、校验手机号

下面是国内 13、15、18开头的手机号正则表达式。(可根据目前国内收集号扩展前两位开头号码)

^(13[0-9]|14[5|7]|15[0|1|2|3|5|6|7|8|9]|18[0|1|2|3|5|6|7|8|9])\\d{8}$

9、判断IE的版本

IE目前还没被完全取代,很多页面还是需要做版本兼容,下面是IE版本检查的表达式。

^.*MSIE [5-8](?:\\.[0-9]+)?(?!.*Trident\\/[5-9]\\.0).*$

10、校验IP地址

IP4 正则语句:

\\b(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\b

IP6 正则语句:

(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))

11、检查URL的前缀

应用开发中很多时候需要区分请求是HTTPS还是HTTP,通过下面的表达式可以取出一个url的前缀然后再逻辑判断。

if (!s.match(/^[a-zA-Z]+:\\/\\//)){ s = 'http://' + s;}

12、提取URL链接

下面的这个表达式可以筛选出一段文本中的URL。

^(f|ht){1}(tp|tps):\\/\\/([\\w-]+\\.)+[\\w-]+(\\/[\\w- ./?%&=]*)?

13、文件路径及扩展名校验

验证windows下文件路径和扩展名(下面的例子中为.txt文件)

^([a-zA-Z]\:|\\)\\([^\\]+\\)[^\/:?”<>|]+\.txt(l)?$

14、提取Color Hex Codes

有时需要抽取网页中的颜色代码,可以使用下面的表达式。

^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$

15、提取网页图片

假若你想提取网页中所有图片信息,可以利用下面的表达式。

\\< *[img][^\\>]*[src] *= *[\\"\\']{0,1}([^\\"\\'\\ >]*)

16、提取页面超链接

提取html中的超链接。

(<a\\s*(?!.*\\brel=)[^>]*)(href="https?:\\/\\/)((?!(?:(?:www\\.)?'.implode('|(?:www\\.)?', $follow_list).'))[^"]+)"((?!.*\\brel=)[^>]*)(?:[^>]*)>

17、查找CSS属性

通过下面的表达式,可以搜索到相匹配的CSS属性。

^\\s*[a-zA-Z\\-]+\\s*[:]{1}\\s[a-zA-Z0-9\\s.#]+[;]{1}

18、抽取注释

如果你需要移除HMTL中的注释,可以使用如下的表达式。

<!--(.*?)-->

19、匹配HTML标签

通过下面的表达式可以匹配出HTML中的标签属性。

<\\/?\\w+((\\s+\\w+(\\s*=\\s*(?:".*?"|'.*?'|[\\^'">\\s]+))?)+\\s*|\\s*)\\/?>

Ps:参考资料

  1. 正则表达式 匹配中文,英文字母和数字及_的写法!同时控制长度

Android Studio配置正式签名和debug签名

发表于 2016-09-30   |   分类于 Android , 开发工具 , Android Studio

需求:
如果应用中牵扯到第三方平台集成的话,调试是非常讨厌的一件事,因为很多第三方要求正式签名后生成的包才可以正常使用。所以,在debug模式下配置正式签名包,就可以解决问题。

在主工程(一般都是app)下的build.gradle里,配置2个签名:

signingConfigs {  
    release {  
      keyAlias '###'  
      keyPassword '******'  
      storeFile file('../###.jks')  
      storePassword '******'  
    }  
    debug {  
      keyAlias 'androiddebugkey'  
      keyPassword 'android'  
      storeFile file('./debug.keystore')  
      storePassword 'android'  
}
buildTypes {       
    debug {           
      signingConfig signingConfigs.release       
    }       
    release {           
      signingConfig signingConfigs.release       
    }   
  }

其中keyAlias是签名的别名,keyPassword是签名密码,storeFile file是签名文件所在文件夹位置,这里是放在和app同级目录下。
到这里就可以,但是为了保护签名信息,可以优化处理:
在项目根目录下的gradle.properties文件中添加:

RELEASE_KEY_PASSWORD=****** //签名密码  
RELEASE_KEY_ALIAS=****** //签名别名  
RELEASE_STORE_PASSWORD=****** //store密码  
RELEASE_STORE_FILE=***.jks //签名文件地址 

然后修改之前的配置:

signingConfigs {  
    release {  
        keyAlias RELEASE_KEY_ALIAS  
        keyPassword RELEASE_KEY_PASSWORD  
        storeFile file(RELEASE_STORE_FILE)  
        storePassword RELEASE_STORE_PASSWORD  
    }  
    config {  
        keyAlias 'androiddebugkey'  
        keyPassword 'android'  
        storeFile file('./debug.keystore')  
        storePassword 'android'  
    }  
} 

git-命令行常用命令集锦(持续更新)

发表于 2016-09-26   |   分类于 版本控制 , git

1、git clone

从远程主机克隆一个版本库

$ git clone <版本库的网址>

该命令会在本地主机生成一个目录,与远程主机的版本库同名。如果要指定不同的目录名,可以将目录名作为git clone命令的第二个参数。

$ git clone <版本库的网址> <本地目录名>

git clone支持多种协议,除了HTTP(s)以外,还支持SSH、Git、本地文件协议等,
例如:

$ git clone http[s]://example.com/path/to/repo.git/
$ git clone ssh://example.com/path/to/repo.git/
$ git clone git://example.com/path/to/repo.git/
$ git clone /opt/git/project.git
$ git clone file:///opt/git/project.git
$ git clone ftp[s]://example.com/path/to/repo.git/
$ git clone rsync://example.com/path/to/repo.git/

SSH协议还有另一种写法。
$ git clone [user@]example.com:path/to/repo.git/

通常来说,Git协议下载速度最快,SSH协议用于需要用户认证的场合。

如果想要从远程仓库中克隆一个特定的分支该怎么做呢?通常你会使用git clone,不过这么做会将所有其他分支都一并克隆下来。一个便捷的方式是使用git remote add:

$ git init  
$ git remote add -t  -f origin
$ git checkout

如果只想将远程仓库的一个特定提交合并到自己的分支中该怎么做呢?可以使用git cherry-pick 来选择给定SHA值的提交,然后将其合并到当前分支中:

$ git cherry-pick

2、git remote

为了便于管理,Git要求每个远程主机都必须指定一个主机名。git remote命令就用于管理主机名。
不带选项的时候,git remote命令列出所有远程主机。
使用-v选项,可以参看远程主机的网址。

$ git remote -v

克隆版本库的时候,所使用的远程主机自动被Git命名为origin。如果想用其他的主机名,需要用git clone命令的-o选项指定。

$ git clone -o yourname

git remote show命令加上主机名,可以查看该主机的详细信息。

$ git remote show <主机名>

git remote add命令用于添加远程主机。

$ git remote add <主机名> <网址>

git remote rm命令用于删除远程主机。

$ git remote rm <主机名>

git remote rename命令用于远程主机的改名。

$ git remote rename <原主机名> <新主机名>

3、git fetch

一旦远程主机的版本库有了更新(Git术语叫做commit),需要将这些更新取回本地,这时就要用到git fetch命令。

$ git fetch <远程主机名>

上面命令将某个远程主机的更新,全部取回本地。
默认情况下,git fetch取回所有分支(branch)的更新。如果只想取回特定分支的更新,可以指定分支名。

$ git fetch <远程主机名> <分支名>

比如,取回origin主机的master分支。

$ git fetch origin master

所取回的更新,在本地主机上要用”远程主机名/分支名”的形式读取。比如origin主机的master,就要用origin/master读取。
git branch命令的-r选项,可以用来查看远程分支,-a选项查看所有分支。

$ git branch -r
$ git branch -a

上面命令表示,本地主机的当前分支是master,远程分支是origin/master。
取回远程主机的更新以后,可以在它的基础上,使用git checkout命令创建一个新的分支。

$ git checkout -b newBrach origin/master

上面命令表示,在origin/master的基础上,创建一个新分支。
此外,也可以使用git merge命令或者git rebase命令,在本地分支上合并远程分支。

$ git merge origin/master
# 或者
$ git rebase origin/master

上面命令表示在当前分支上,合并origin/master。

4、git pull

git pull命令的作用是,取回远程主机某个分支的更新,再与本地的指定分支合并。它的完整格式稍稍有点复杂。

$ git pull <远程主机名> <远程分支名>:<本地分支名>

比如,取回origin主机的next分支,与本地的master分支合并,需要写成下面这样。

$ git pull origin next:master

如果远程分支是与当前分支合并,则冒号后面的部分可以省略。

$ git pull origin next

上面命令表示,取回origin/next分支,再与当前分支合并。实质上,这等同于先做git fetch,再做git merge。

$ git fetch origin
$ git merge origin/next

在某些场合,Git会自动在本地分支与远程分支之间,建立一种追踪关系(tracking)。比如,在git clone的时候,所有本地分支默认与远程主机的同名分支,建立追踪关系,也就是说,本地的master分支自动”追踪”origin/master分支。
Git也允许手动建立追踪关系。

$ git branch --set-upstream master origin/next

上面命令指定master分支追踪origin/next分支。
如果当前分支与远程分支存在追踪关系,git pull就可以省略远程分支名。

$ git pull origin

上面命令表示,本地的当前分支自动与对应的origin主机”追踪分支”(remote-tracking branch)进行合并。
如果当前分支只有一个追踪分支,连远程主机名都可以省略。

$ git pull

上面命令表示,当前分支自动与唯一一个追踪分支进行合并。
如果合并需要采用rebase模式,可以使用–rebase选项。

$ git pull --rebase <远程主机名> <远程分支名>:<本地分支名>

5、git push

git push命令用于将本地分支的更新,推送到远程主机。它的格式与git pull命令相仿。

$ git push <远程主机名> <本地分支名>:<远程分支名>

注意,分支推送顺序的写法是<来源地>:<目的地>,所以git pull是<远程分支>:<本地分支>,而git push是<本地分支>:<远程分支>。
如果省略远程分支名,则表示将本地分支推送与之存在”追踪关系”的远程分支(通常两者同名),如果该远程分支不存在,则会被新建。

$ git push origin master

上面命令表示,将本地的master分支推送到origin主机的master分支。如果后者不存在,则会被新建。
如果省略本地分支名,则表示删除指定的远程分支,因为这等同于推送一个空的本地分支到远程分支。

$ git push origin :master
# 等同于
$ git push origin --delete master

上面命令表示删除origin主机的master分支。
如果当前分支与远程分支之间存在追踪关系,则本地分支和远程分支都可以省略。

$ git push origin

上面命令表示,将当前分支推送到origin主机的对应分支。
如果当前分支只有一个追踪分支,那么主机名都可以省略。

如果想把本地的某个分支test提交到远程仓库,并作为远程仓库的master分支,或者作为另外一个名叫test的分支,那么可以这么做。

$ git push origin test:master    // 提交本地test分支作为远程的master分支
$ git push origin test:test      // 提交本地test分支作为远程的test分支

如果想删除远程的分支呢?类似于上面,如果:左边的分支为空,那么将删除:右边的远程的分支。

$ git push origin :test   

刚提交到远程的test将被删除,但是本地还会保存的,不用担心

$ git push

如果当前分支与多个主机存在追踪关系,则可以使用-u选项指定一个默认主机,这样后面就可以不加任何参数使用git push。

$ git push -u origin master

上面命令将本地的master分支推送到origin主机,同时指定origin为默认主机,后面就可以不加任何参数使用git push了。
不带任何参数的git push,默认只推送当前分支,这叫做simple方式。此外,还有一种matching方式,会推送所有有对应的远程分支的本地分支。Git 2.0版本之前,默认采用matching方法,现在改为默认采用simple方式。如果要修改这个设置,可以采用git config命令。

$ git config --global push.default matching
# 或者
$ git config --global push.default simple

还有一种情况,就是不管是否存在对应的远程分支,将本地的所有分支都推送到远程主机,这时需要使用–all选项。

$ git push --all origin

上面命令表示,将所有本地分支都推送到origin主机。
如果远程主机的版本比本地版本更新,推送时Git会报错,要求先在本地做git pull合并差异,然后再推送到远程主机。这时,如果你一定要推送,可以使用–force选项。

$ git push --force origin

上面命令使用–force选项,结果导致在远程主机产生一个”非直进式”的合并(non-fast-forward merge)。除非你很确定要这样做,否则应该尽量避免使用–force选项。
最后,git push不会推送标签(tag),除非使用–tags选项。

$ git push origin --tags

6、git log

日志输出

$ git log -author="aname"

只显示某个用户的提交

$ git log -name-only

只显示变更了的文件的名称

$ git log -oneline

将提交信息压缩成一行显示

$ git log -graph

显示所有提交的依赖树

$ git log -reverse

按照反序显示提交记录(最旧的提交在最前面)

$ git log -after

显示某个日期之后的提交

$ git log -before

显示某个日期之前的提交

$ git log -p filename

查看某个文件的变更日志

$ git log -L 1,1:filename

查看某文件(1,1)位置的变更日志

$ git blame filename

查看某文件中的每一行是由谁变更的

$ git log --no-merges master..

查看尚未合并到父分支的变更日志,注意–no-merges 选项意味着只显示没有合并到任何分支的变更,master..选项意味着只显示没有合并到master分支的变更(你必须在master后面加上..)。也可以使用 git show –no-merges master.. 或者 git log -p –no-merges master.. 命令(输出结果相同)来查看一下尚未合并的文件的详细变更。

$ git show branchname:filename

查看指定分支上的指定文件的内容

$ git show branchname filename

查看指定分支上的指定文件和当前分支上的对应文件的差异

$ git pull --reabase

重新设置基线,这个命令会迫使git先将远程分支上的变更pull到本地,然后将尚未push的提交重新以这个最新版本作为基础添加进去,这样就可以避免合并以及丑陋的合并信息了。

$ git rebase

相当与一次执行git pull和git merge,不同是的是,git会保留提交历史轨迹。
在rebase的过程中,也许会出现冲突(conflict). 在这种情况,Git会停止rebase并会让你去解决 冲突;在解决完冲突后,用”git-add”命令去更新这些内容的索引(index), 然后,你无需执行 git-commit,只要执行:

$ git rebase --continue

这样git会继续应用(apply)余下的补丁。
在任何时候,你可以用–abort参数来终止rebase的行动,并且本地分支会回到rebase开始前的状态。

$ git rebase --abort    

$ git merge --no-ff

本地合并后保留分支结构。

$ git commit --amend

修复你之前的提交,而不是重新提交,也就是说修改的提交会追加到之前commit上,而不会产生新的commit。

$ git reset --hard commit-hash

回滚到一个特定的历史版本,所有这次提交之后的变更都将被丢弃。

$ git reset commit-hash

回滚到一个特定的历史版本,所有这次提交之后的变更都将被移到“准备提交且未暂存”状态,这意味着你必须使用git add . 和git commit把他们添加回仓库。

$ git reset --soft commit-hash

回滚到一个特定的历史版本,所有这次提交之后的变更都将被移到“准备提交且已暂存”的状态,这意味着你仅仅只要执行git commit命令将它们添加回仓库。

$ git checkout filename

取消某文件的本地变更。

$ git revert -n

自动将回滚的文件重新提交到仓库,并且提示你要写一个新的提交信息。-n 选项告诉git先别急着提交,因为我只是想看一眼罢了。

7、git clean

有时,Git会提示“untracked working tree files”会“overwritten by checkout”。造成这种情况的原因有很多。不过通常来说,我们可以使用如下命令来保持工作树的整洁,从而防止这种情况的发生:

$ git clean -f     # remove untracked files
$ git clean -fd    # remove untracked files/directories
$ git clean -nfd   # list all files/directories that would be removed

8、git tag

查看标签(用来标记标志性的稳定版本信息)

$ git tag -l '[expression]'

查看那符合正则表达式的

$ git tag -a <tag name> -m <comment>

添加带注释的标签

$ git tag -a <tag name> <md5>

对某个版本打标签

$ git tag [tag name]

如果没有标签名,则为查看所有标签。带标签名则为新建标签

Ps:Git命令速查表

1、常用的Git命令

命令 简要说明
git add 添加至暂存区
git add–interactive 交互式添加
git apply 应用补丁
git am 应用邮件格式补丁
git annotate 同义词,等同于 git blame
git archive 文件归档打包
git bisect 二分查找
git blame 文件逐行追溯
git branch 分支管理
git cat-file 版本库对象研究工具
git checkout 检出到工作区、切换或创建分支
git cherry-pick 提交拣选
git citool 图形化提交,相当于 git gui 命令
git clean 清除工作区未跟踪文件
git clone 克隆版本库
git commit 提交
git config 查询和修改配置
git describe 通过里程碑直观地显示提交ID
git diff 差异比较
git difftool 调用图形化差异比较工具
git fetch 获取远程版本库的提交
git format-patch 创建邮件格式的补丁文件。参见 git am 命令
git grep 文件内容搜索定位工具
git gui 基于Tcl/Tk的图形化工具,侧重提交等操作
git help 帮助
git init 版本库初始化
git init-db* 同义词,等同于 git init
git log 显示提交日志
git merge 分支合并
git mergetool 图形化冲突解决
git mv 重命名
git pull 拉回远程版本库的提交
git push 推送至远程版本库
git reBase 分支变基
git rebase–interactive 交互式分支变基
git reflog 分支等引用变更记录管理
git remote 远程版本库管理
git repo-config* 同义词,等同于 git config
git reset 重置改变分支“游标”指向
git rev-parse 将各种引用表示法转换为哈希值等
git revert 反转提交
git rm 删除文件
git show 显示各种类型的对象
git stage* 同义词,等同于 git add
git stash 保存和恢复进度
git status 显示工作区文件状态
git tag 里程碑管理

2、对象库操作相关命令

命令 简要说明
git commit-tree 从树对象创建提交
git hash-object 从标准输入或文件计算哈希值或创建对象
git ls-files 显示工作区和暂存区文件
git ls-tree 显示树对象包含的文件
git mktag 读取标准输入创建一个里程碑对象
git mktree 读取标准输入创建一个树对象
git read-tree 读取树对象到暂存区
git update-index 工作区内容注册到暂存区及暂存区管理
git unpack-file 创建临时文件包含指定 blob 的内容
git write-tree 从暂存区创建一个树对象

3、引用操作相关命令

命令 简要说明
git check-ref-format 检查引用名称是否符合规范
git for-each-ref 引用迭代器,用于shell编程
git ls-remote 显示远程版本库的引用
git name-rev 将提交ID显示为友好名称
git peek-remote* 过时命令,请使用 git ls-remote
git rev-list 显示版本范围
git show-branch 显示分支列表及拓扑关系
git show-ref 显示本地引用
git symbolic-ref 显示或者设置符号引用
git update-ref 更新引用的指向
git verify-tag 校验 GPG 签名的Tag

4、版本库管理相关命令

命令 简要说明
git count-objects 显示松散对象的数量和磁盘占用
git filter-branch 版本库重构
git fsck 对象库完整性检查
git fsck-objects* 同义词,等同于 git fsck
git gc 版本库存储优化
git index-pack 从打包文件创建对应的索引文件
git lost-found* 过时,请使用 git fsck –lost-found 命令
git pack-objects 从标准输入读入对象ID,打包到文件
git pack-redundant 查找多余的 pack 文件
git pack-refs 将引用打包到 .git/packed-refs 文件中
git prune 从对象库删除过期对象
git prune-packed 将已经打包的松散对象删除
git relink 为本地版本库中相同的对象建立硬连接
git repack 将版本库未打包的松散对象打包
git show-index 读取包的索引文件,显示打包文件中的内容
git unpack-objects 从打包文件释放文件
git verify-pack 校验对象库打包文件

5、数据传输相关命令

命令 简要说明
git fetch-pack 执行 git fetch 或 git pull 命令时在本地执行此命令,用于从其他版本库获取缺失的对象
git receive-pack 执行 git push 命令时在远程执行的命令,用于接受推送的数据
git send-pack 执行 git push 命令时在本地执行的命令,用于向其他版本库推送数据
git upload-archive 执行 git archive –remote 命令基于远程版本库创建归档时,远程版本库执行此命令传送归档
git upload-pack 执行 git fetch 或 git pull 命令时在远程执行此命令,将对象打包、上传

6、邮件相关命令

命令 简要说明
git imap-send 将补丁通过 IMAP 发送
git mailinfo 从邮件导出提交说明和补丁
git mailsplit 将 mbox 或 Maildir 格式邮箱中邮件逐一提取为文件
git request-pull 创建包含提交间差异和执行PULL操作地址的信息
git send-email 发送邮件

7、协议相关命令

命令 简要说明
git daemon 实现Git协议
git http-backend 实现HTTP协议的CGI程序,支持智能HTTP协议
git instaweb 即时启动浏览器通过 gitweb 浏览当前版本库
git shell 受限制的shell,提供仅执行Git命令的SSH访问
git update-server-info 更新哑协议需要的辅助文件
git http-fetch 通过HTTP协议获取版本库
git http-push 通过HTTP/DAV协议推送
git remote-ext 由Git命令调用,通过外部命令提供扩展协议支持
git remote-fd 由Git命令调用,使用文件描述符作为协议接口
git remote-ftp 由Git命令调用,提供对FTP协议的支持
git remote-ftps 由Git命令调用,提供对FTPS协议的支持
git remote-http 由Git命令调用,提供对HTTP协议的支持
git remote-https 由Git命令调用,提供对HTTPS协议的支持
git remote-testgit 协议扩展示例脚本

8、版本库转换和交互相关命令

命令 简要说明
git archimport 导入Arch版本库到Git
git bundle 提交打包和解包,以便在不同版本库间传递
git cvsexportcommit 将Git的一个提交作为一个CVS检出
git cvsimport 导入CVS版本库到Git。或者使用 cvs2git
git cvsserver Git的CVS协议模拟器,可供CVS命令访问Git版本库
git fast-export 将提交导出为 git-fast-import 格式
git fast-import 其他版本库迁移至Git的通用工具
git svn Git 作为前端操作 Subversion

9、合并相关的辅助命令

命令 简要说明
git merge-base 供其他脚本调用,找到两个或多个提交最近的共同祖先
git merge-file 针对文件的两个不同版本执行三向文件合并
git merge-index 对index中的冲突文件调用指定的冲突解决工具
git merge-octopus 合并两个以上分支。参见 git merge 的octopus合并策略
git merge-one-file 由 git merge-index 调用的标准辅助程序
git merge-ours 合并使用本地版本,抛弃他人版本。参见 git merge 的ours合并策略
git merge-recursive 针对两个分支的三向合并。参见 git merge 的recursive合并策略
git merge-resolve 针对两个分支的三向合并。参见 git merge 的resolve合并策略
git merge-subtree 子树合并。参见 git merge 的 subtree 合并策略
git merge-tree 显式三向合并结果,不改变暂存区
git fmt-merge-msg 供执行合并操作的脚本调用,用于创建一个合并提交说明
git rerere 重用所记录的冲突解决方案

10、 杂项

命令 简要说明
git bisect–helper 由 git bisect 命令调用,确认二分查找进度
git check-attr 显示某个文件是否设置了某个属性
git checkout-index 从暂存区拷贝文件至工作区
git cherry 查找没有合并到上游的提交
git diff-files 比较暂存区和工作区,相当于 git diff –raw
git diff-index 比较暂存区和版本库,相当于 git diff –cached –raw
git diff-tree 比较两个树对象,相当于 git diff –raw A B
git difftool–helper 由 git difftool 命令调用,默认要使用的差异比较工具
git get-tar-commit-id 从 git archive 创建的 tar 包中提取提交ID
git gui–askpass 命令 git gui 的获取用户口令输入界面
git notes 提交评论管理
git patch-id 补丁过滤行号和空白字符后生成补丁唯一ID
git quiltimport 将Quilt补丁列表应用到当前分支
git replace 提交替换
git shortlog 对 git log 的汇总输出,适合于产品发布说明
git stripspace 删除空行,供其他脚本调用
git submodule 子模组管理
git tar-tree 过时命令,请使用 git archive
git var 显示 Git 环境变量
git web–browse 启动浏览器以查看目录或文件
git whatchanged 显示提交历史及每次提交的改动
git-mergetool–lib 包含于其他脚本中,提供合并/差异比较工具的选择和执行
git-parse-remote 包含于其他脚本中,提供操作远程版本库的函数
git-sh-setup 包含于其他脚本中,提供 shell 编程的函数库

Ps:参考文章

  1. Git 远程操作的正确姿势
  2. 深入理解学习Git工作流

svn-命令行常用命令集锦(持续更新)

发表于 2016-09-26   |   分类于 版本控制 , svn

1、将文件checkout到本地目录

svn checkout path(path是服务器上的目录)
简写:svn co

2、往版本库中添加新的文件

svn add file(file是文件名称)
svn add *.java(添加当前目录下所有的java文件)

3、将改动的文件提交到版本库

svn commit -m “your content”
简写:svn ci

4、加锁/解锁

svn lock -m “your content” [–force] PATH

5、更新到某个版本

svn update -r m path(m是要更新的版本号)
svn update如果后面没有目录,默认将当前目录以及子目录下的所有文件都更新到最新版本。
简写:svn up

6、查看文件或者目录状态

  1. svn status path
    目录下的文件和子目录的状态,正常状态不显示
    状态说明:
    ?:不在svn的控制中;
    M:内容被修改;
    C:发生冲突;
    A:预定加入到版本库;
    K:被锁定
  2. svn status -v path
    显示文件和子目录状态,第一列保持相同,第二列显示工作版本号,第三和第四列显示最后一次修改的版本号和修改人。
    注:svn status、svn diff和 svn revert这三条命令在没有网络的情况下也可以执行的,因为svn在本地的.svn中保留了本地版本的原始拷贝。

7、删除文件

svn delete path -m “your content”
简写:svn (del, remove, rm)

8、查看日志

svn log path

9、查看文件详细信息

svn info path 例如:svn info test.php

10、比较差异

svn diff path(将修改的文件与基础版本比较)
svn diff -r m:n path(对版本m和版本n比较差异)
简写:svn di

11、将两个版本之间的差异合并到当前文件

svn merge -r m:n path

12、SVN 帮助

svn help
svn help ci

13、代码库URL变更

svn switch (sw): 更新工作副本至不同的URL。
用法:

  1. switch URL [PATH]
    更新你的工作副本,映射到一个新的URL,其行为跟“svn update”很像,也会将服务器上文件与本地文件合并。这是将工作副本对应到同一仓库中某个分支或者标记的方法。
  2. switch –relocate FROM TO [PATH…]
    改写工作副本的URL元数据,以反映单纯的URL上的改变。当仓库的根URL变动比如方案名或是主机名称变动),但是工作副本仍旧对映到同一仓库的同一目录时使用这个命令更新工作副本与仓库的对应关系。

14、解决冲突

svn resolved: 移除工作副本的目录或文件的“冲突”状态。
用法: resolved PATH…
注意: 本子命令不会依语法来解决冲突或是移除冲突标记;它只是移除冲突的相关文件,然后让 PATH 可以再次提交。

123
妞妞骑毛驴

妞妞骑毛驴

Android、Java、Mac、Web、版本控制

22 日志
21 分类
17 标签
GitHub
© 2015 - 2016 妞妞骑毛驴
由 Hexo 强力驱动
主题 - NexT.Pisces