$git update-index --assume-unchanged /path/to/file
git update-index --assume-unchanged *.properties
$ git update-index --no-assume-unchanged /path/to/file
git update-index --no-assume-unchanged *.properties
? 代表任意的一个字符
* 代表任意数目的字符
{!ab} 必须不是此类型
{ab,bb,cx} 代表ab,bb,cx中任一类型即可
[abc] 代表a,b,c中任一字符即可
[ ^abc] 代表必须不是a,b,c中任一字符
由于git不会加入空目录,所以下面做法会导致tmp不会存在 tmp/* //忽略tmp文件夹所有文件
$ git push <远程主机名> <本地分支名>:<远程分支名>
$ git push origin master
上面命令表示,将本地的master分支推送到origin主机的master分支。如果后者不存在,则会被新建。
如果省略本地分支名,则表示删除指定的远程分支,因为这等同于推送一个空的本地分支到远程分支。
$ git push origin :master
# 等同于
$ git push origin --delete master
如果当前分支与远程分支之间存在追踪关系,则本地分支和远程分支都可以省略。
$ git push origin
上面命令表示,将当前分支推送到origin主机的对应分支。
如果当前分支只有一个追踪分支,那么主机名都可以省略。
$ git push
$ git push -u origin master
$ ssh-keygen -t rsa -C "mys163"
测试
输入命名后,输入yes才能回车
$ ssh git@github.com
$ git config --global core.quotepath false
$git config --global user.name "Jiang Xin"
$git config --global user.email jiangxin@ossxp.com
$sudo git config --system alias.st status
$git config --global alias.st status
$sudo git config --system alias.st status
$git config --global color.ui true
git rev-parse --git-dir
$git rev-parse --show-toplevel
$git rev-parse --show-prefix
$git rev-parse --show-cdup
执行下面的命令,将打开/path/to/my/workspace/demo/.git/config文件进行编辑。
$cd/path/to/my/workspace/demo/
$git config -e
$git config -e --global #全局配置文件
$git config -e --system #系统级配置文件
执行下面的命令,删除Git全局配置文件中关于user.name和user.email的设置:
$git config --unset--global user.name
$git config --unset--global user.email
$git log --pretty=fuller
$git commit --amend --allow-empty --reset-author
说明:
参数--reset-author的含义是将Author(提交者)的ID同步修改,否则只会影响提交者(Commit)的ID。使用此参数也会重置AuthorDate信息。
$cd/path/to/my/workspace
$git clone demo demo-step-1
git log查看提交日志(附加的--stat参数可以看到每次提交的文件变更统计)。
$git log --stat
$git log --pretty=oneline
$git status -s #显示精简格式的状态输出
$git diff #工作区与提交任务(提交暂存区,stage)中相比的差异
$git diff HEAD #将工作区和HEAD(当前工作分支)相比
$git diff --cached
#通过参数--cached或--staged调用git diff命令,看到的是提交暂存区(提交任务,stage)和版本库中文件的差异。
工作区add -->暂存区
工作区<-- git checkout--<file>暂存区
git rm--cached<file> -->暂存区
暂存区commit -->版本库
暂存区<--git reset HEAD版本库
工作区、暂存区<--git checkout HEAD<file> 版本库
图 5-1 工作区、版本库、暂存区原理图
当对工作区修改(或新增)的文件执行git add命令时,暂存区的目录树将被更新,同时工作区修改(或新增)的文件内容会被写入到对象库中的一个新的对象中,而该对象的ID被记录在暂存区的文件索引中。
当执行提交操作(git commit)时,暂存区的目录树会写到版本库(对象库)中,master分支会做相应的更新,即master最新指向的目录树就是提交时原暂存区的目录树。
当执行git reset HEAD命令时,暂存区的目录树会被重写,会被master分支指向的目录树所替换,但是工作区不受影响。
当执行git rm--cached<file>命令时,会直接从暂存区删除文件,工作区则不做出改变。
当执行git checkout.或git checkout--<file>命令时,会用暂存区全部的文件或指定的文件替换工作区的文件。这个操作很危险,会清除工作区中未添加到暂存区的改动。
当执行git checkout HEAD.或git checkout HEAD<file>命令时,会用HEAD指向的master分支中的全部或部分文件替换暂存区和工作区中的文件。这个命令也是极具危险性的,因为不但会清除工作区中未提交的改动,也会清除暂存区中未提交的改动。
对于HEAD(版本库中当前提交)指向的目录树,可以使用Git底层命令ls-tree来查看。
$git ls-tree -l HEAD
$git clean -fd # 清除当前工作区中没有加入版本库的文件和目录(非跟踪文件和目录)
$git checkout. # 用暂存区内容刷新工作区。
$git ls-files -s #显示暂存区的目录树
git diff HEAD # 显示工作区和版本库的差别
git diff master # 显示工作区和版本库的差别
git diff # 显示工作区和暂存区的差别
git diff --cached # 显示暂存区和版本库的差别
git diff --cached HEAD # 显示暂存区和版本库的差别
Git的提交命令(git commit)可以带上-a参数,对本地所有变更的文件执行提交操作,包括对本地修改的文件和删除的文件,但不包括未被版本库跟踪的文件
$git stash #命令git stash就是用于保存当前工作进度的。
6.1 Git对象库探秘
$git status -s -b
#-s参数以显示精简输出外,-b参数,能够同时显示出当前工作分支的名称
现在连续执行下面的三个命令会看到相同的输出:
$git log -l HEAD
$git log -l master
$git log -l refs/heads/master
也就是说,在当前版本库中,HEAD、master和refs/heads/master具有相同的指向。
7.1 分支游标master探秘
$git log --graph --oneline
$git reset --hard HEAD^ #将master重置到上一个老的提交上
$git reset --hard 9e8a761 #重置到某个提交点上,会彻底地丢弃历史
7.2 用reflog挽救错误的重置
$git reflog show master|head-5
$git reset --hard master@{2} #将引用master切换到两次变更之前的值
7.3 深入了解git reset命令
用法一:git reset[-q][<commit>][--]<paths>...
用法二:git reset[--soft|--mixed|--hard|--merge|--keep][-q][<commit>]
工作区<--1 暂存区 <--2 master <--3 commit
第一种用法(包含了路径<paths>的用法)不会重置引用,更不会改变工作区,而是用指定提交状态(
)下的文件( )替换掉暂存区中的文件。例如命令git reset HEAD 相当于取消之前执行的git add 命令时改变的暂存区。
第二种用法 (不使用路径<paths>的用法)则会重置引用,根据不同的选项,可以对暂存区域或者工作区进行重置。
8.1 HEAD的重置即检出
8.3 深入了解git checkout命令
原文:https://www.cnblogs.com/my-flash/p/12379878.html