您的位置:首页 > 其它

git学习笔记

2015-12-16 00:00 309 查看
git init 把当前目录编程Git可管理的仓库(添加了一个.git文件夹)

echo "Git is a version control system." > readme.txt
> 输入这句话保存到创建的readme.txt文件中

echo " Git is free software." >> readme.txt
>> 追加内容到readme.txt文件中

git add readme.txt 把文件添加到仓库
git add -A 添加所有文件

git commit -m "index"
-m 是本次提交的说明

git commit -a -m "index" 提交所有文件

可以一次add多个文件,然后一次性commit

git status告诉你有文件被修改过,用git diff可以查看修改内容。

git reset --hard HEAD^ 回退到上一个版本
上一个版本就是HEAD^,上上一个版本就是HEAD^^,当然往上100个版本写100个^比较容易数不过来,所以写成HEAD~100。

git reset --hard 3628164(版本号的前几位,没必要写全,git会自动寻找) 继上一部操作后,重新恢复到新版本

git reflog 记录你的每一次命令,(可以找到每一个版本的commit id)

工作区:在电脑里能看到的目录
版本库:.git
暂存区:也叫做索引,英文名称stage或index,一般存放在.git下的index文件(.git/index)

git checkout -- readme.txt 把readme.txt文件在工作区的修改全部撤销
1 文件自修改后还没有放到暂存区(只是修改了文件,而没有git add),现在,撤销操作就是回到和 版本库一模一样的状态: 回到最近一次git commit
2 文件已经放到暂存区(git add操作是放到暂存区),又做了修改,现在撤销修改就回到添加到暂存区的状态 : 回到最近一次 git add

git创建新仓库:
1 登陆github,创建一个webstudy库
2 cd到本地webstudy库中,创建ssh key
ssh-keygen -t rsa -C "1099594257qq.com"
一路回车
(可以在用户目录里找到.ssh目录,.里面有SSH key的密钥对,我这里的目录是

/c/Users/Administrator/.ssh/id_rsa)

3 git remote add origin git@github.com:muyoushujuxian/learngit.git
将你的仓库链接到远程的服务器,远程库的名字就叫做origin,这是Git默认的,也可以修改,但是不建议修改,否则容易找不到

git remote rm origin 删除绑定远程库

本地内容推送到远程库
git push -u origin master

可以把master换成其他的branch(分支)名

将本地GIT版本库PUSH到一个GITHUB上一个空的版本库时可能会出现如下错误
error:src refspec master does not match any
原因: 本地版本库为空, 空目录不能提交 (只进行了init, 没有add和commit)

克隆远程库
git clone git@github.com:michaelliao/gitskills.git

克隆本地库(注意要在与当前库不同的路径下clone)

git clone /path/repository

分支:把不同特性的开发分离开来,之后可以合并
:每次提交,git都把它们穿成一条时间线,这条时间线就是一个分支

HEAD指向master,master指向提交,所以HEAD指向的是当前分支

git checkout -b dev 创建一个dev 的分支 -b 表示创建并切换 ,表示以两条命令
git branch dev //创建dev分支
git checkout dev //切换到dev分支

git push origin dev //把分支推送到远程库

git branch 查看当前分支

合并分支
git merge dev 合并指定分支(dev)到当前分支 master,合并后的master分支会保存在dev分支上面的commit记录,很是繁琐.

### 忽略dev分支上面的commit记录,仅仅在master上保留这一次merge的记录:

git merge dev --squash

删除分支
git branch -d dev

删除远程分支 serverfix

$ git push origin :serverfix

.gitignore

此文件中配置不需要假如"版本管理的文件/夹"

1、配置语法:

  以斜杠“/”开头表示目录;也可以只写一个目录名node_modules,则任何目录,子目录下的nodemodules目录都会被忽略

  以星号“*”通配多个字符;

  以问号“?”通配单个字符

  以方括号“[]”包含单个字符的匹配列表;

  以叹号“!”表示不忽略(跟踪)匹配到的文件或目录;

  此外,git 对于 .ignore 配置文件是按行从上到下进行规则匹配的,意味着如果前面的规则匹配的范围更大,则后面的规则将不会生效;

2、示例:

  (1)规则:fd1/*
     说明:忽略目录 fd1 下的全部内容;注意,不管是根目录下的 /fd1/ 目录,还是某个子目录 /child/fd1/ 目录,都会被忽略;

  (2)规则:/fd1/*
     说明:忽略根目录下的 /fd1/ 目录的全部内容;

  (3)规则:

/*
!.gitignore
!/fw/bin/
!/fw/sf/

说明:忽略全部内容,但是不忽略 .gitignore 文件、根目录下的 /fw/bin/ 和 /fw/sf/ 目录;

感谢http://www.cnblogs.com/haiq/archive/2012/12/26/2833746.html

https方式每次都要输入密码,按照如下设置即可输入一次就不用再手输入密码的困扰而且又享受https带来的极速

设置记住密码(默认15分钟):

git config --global credential.helper cache

如果想自己设置时间,可以这样做:

git config credential.helper 'cache --timeout=3600'

这样就设置一个小时之后失效

长期存储密码:

git config --global credential.helper store


查看某人提交记录

git log --author="xiaoming" --pretty=short


查看所以用户提交的代码行数, --since='2017-10-01' 是开始日期

git log --format='%aN' | sort -u | while read name; do echo -en "$name\t"; git log --author="$name" --since='2017-10-01' --pretty=tformat: --numstat | awk '{ add += $1; subs += $2; loc += $1 - $2 } END { printf "added lines: %s, removed lines: %s, total lines: %s\n", add, subs, loc }' -; done
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: