将更新的代码加入版本库管理
git commit -a -m "description"
从本地git仓库获取指定文件
git checkout 文件名称
例如:git checkout drthelp.php
git init 创建仓库
git clone <repo> <directory> 克隆仓库
repo:仓库地址
directory:本地目录
将版本库代码推送到代码库
git push
git push命令用于将本地分支的更新,推送到远程主机
git push <远程主机名> <本地分支名>:<远程分支名>
git push pb master:master
注意,分支推送顺序的写法是<来源地>:<目的地>,所以git pull是<远程分支>:<本地分支>,
而git push是<本地分支>:<远程分支>。
如果省略远程分支名,则表示将本地分支推送与之存在”追踪关系”的远程分支(通常两者同名),如果该远程分支不存在,则会被新建。
git push <远程主机名> <本地主分支>
git push origin master
上面命令表示,将本地的master分支推送到origin主机的master分支。如果后者不存在,则会被新建。
如果省略本地分支名,则表示删除指定的远程分支,因为这等同于推送一个空的本地分支到远程分支。
git push origin :master
# 等同于
git push origin --delete master
如果当前分支与远程分支之间存在追踪关系,则本地分支和远程分支都可以省略。(如何建立追踪关系)
git push origin
上面命令表示,将当前分支推送到origin主机的对应分支。
如果当前分支只有一个追踪分支,那么主机名都可以省略。
git push
如果当前分支与多个主机存在追踪关系,则可以使用-u选项指定一个默认主机,这样后面就可以不加任何参数使用git push。
git push -u <远程主机名> <远程分支名>
git push -u origin master
上面命令将本地的master分支推送到origin主机,同时指定origin为默认主机,后面就可以不加任何参数使用git push了。
git push -u origin master:develop 将本地的master分支推送到origin主机的develop分支,同时指定origin为默认主机
不带任何参数的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 push不会推送标签(tag),除非使用–tags选项。
git push origin --tags
有时候当远程xxx分支被删掉了后,用git branch -a 你还可以看到本地还有remote/origin/xxx这个分支,那么你可以使用git fetch -p 这个命令可以帮你同步最新的远程分支,并删掉本地被删了的远程分支
查看git状态
git status
git status -s 查看简介状态
git add filename.php 将filename.php文件添加到git仓库
git add . 添加所有新文件
git diff (尚未缓存的改动)
git diff --cached (查看已缓存的改动)
git diff HEAD (查看已缓存的与未缓存的所有改动)
git diff --stat (显示摘要而非整个 diff)
1.1 比较工作区与暂存区
git diff 不加参数即默认比较当前分支工作区与暂存区
例:
git diff Application/Cron/Controller/AoshitestController.class.php
git diff -- Application/Cron/Controller/AoshitestController.class.php
1.2 比较暂存区与最新本地版本库(本地库中最近一次commit的内容)
git diff --cached [<path>]
例:
git diff --cached Application/Cron/Controller/AoshitestController.class.php
1.3 比较工作区与最新本地版本库
git diff HEAD [<path>...] 如果HEAD指向的是master分支,那么HEAD还可以换成master
例:
git diff HEAD Application/Cron/Controller/AoshitestController.class.php
1.4 比较工作区与指定commit-id的差异
git diff commit-id [<path>...]
例:
git diff 69659d7 Application/Cron/Controller/AoshitestController.class.php
1.5 比较暂存区与指定commit-id的差异
git diff --cached [<commit-id>] [<path>...]
例:
git diff --cached 69659d7 Application/Cron/Controller/AoshitestController.class.php
1.6 比较两个commit-id之间的差异
git diff [<commit-id>] [<commit-id>]
例如:
git diff 6805ee9 6e7169b Application/Cron/Controller/AoshitestController.class.php 指定文件版本差异
git diff 6805ee9 6e7169b Application/ 指定目录版本差异
git diff 6805ee9 6e7169b 版本差异
1.7 使用git diff打补丁
git rm <file> 删除文件(该命令会删除工作区和暂存区的文件)
git rm -f <file> 删除文件(该命令会删除之前修改过并且存放在暂存区的文件<工作区 和 暂存区的文件都会被删除>)
git rm a.txt git rm -f a.txt
git rm --cached <file> 删除文件(该命令会删除暂存区的文件)
git rm --cached a.txt
git rm -r *|目录名 递归删除文件或目录
git rm -r *
git rm -r static
git mv <old file> <new file> 用于重新命名文件 (工作区和暂存区)
git mv a.txt a.md 将a.txt名称修改为 a.md
git reset HEAD -- <file> 取消已缓存的内容
git reset HEAD -- a.txt 取消更新的缓存
git reset --hard HEAD^ 回退到上个版本
git reset --hard HEAD~3 回退到前3次提交之前,以此类推,回退到n次提交之前
git reset --hard commit_id 退到/进到 指定commit的sha码
git 添加忽略文件
方案1:
要忽略的文件在加入git版本库之前,在项目根目录添加.gitignore文件,里面添加忽略的文件,每行一类或一个
如果要强制添加忽略的文件 git add -f 文件名
方案2:(使用过)
git仓库根目录有一个 .ignore 文件,在.ignore文件中添加要忽略的文件,每行一个
1)/mtk/ 过滤仓库内整个文件夹 mtk
2)*.zip 过滤仓库内所有.zip文件
3)/mtk/do.c 过滤仓库内某个具体文件 do.c
被过滤掉的文件就不会出现在git仓库中(gitlab或github)了,当然本地库中还有,只是push的时候不会上传。
需要注意的是,gitignore还可以指定要将哪些文件添加到版本管理中:
1)!*.zip
2)!/mtk/one.txt
唯一的区别就是规则开头多了一个感叹号,Git会将满足这类规则的文件添加到版本管理中。
最后需要强调的一点是,如果你不慎在创建.gitignore文件之前就push了项目,那么即使你在.gitignore文件中写入新的过滤规则,这些规则也不会起作用,Git仍然会对所有文件进行版本管理。
简单来说,出现这种问题的原因就是Git已经开始管理这些文件了,所以你无法再通过过滤规则过滤它们。因此一定要养成在项目开始就创建.gitignore文件的习惯,否则一旦push,处理起来会非常麻烦。解决方法:(需要删除要忽略的文件,然后更新git仓库,git push ,然后再添加忽略的文件,修改忽略文件(.ignore))
.gitignore配置文件用于配置不需要加入版本管理的文件,配置好该文件可以为版本管理带来很大的便利,以下是对于配置.gitignore的一些心得记录:
1)配置语法:
以斜杠“/”开头表示目录;
以星号“*”通配多个字符;
以问号“?”通配单个字符
以方括号“[]”包含单个字符的匹配列表;
以叹号“!”表示不忽略(跟踪)匹配到的文件或目录;
此外,git 对于 .ignore 配置文件是按行从上到下进行规则匹配的,意味着如果前面的规则匹配的范围更大,则后面的规则将不会生效;
2)示例说明
a)规则:fd1/*
说明:忽略目录 fd1 下的全部内容;注意,不管是根目录下的 /fd1/ 目录,还是某个子目录 /child/fd1/ 目录,都会被忽略;
b)规则:/fd1/*
说明:忽略根目录下的 /fd1/ 目录的全部内容;
c)规则:
/*
!.gitignore
!/fw/bin/
!/fw/sf/
说明:忽略全部内容,但是不忽略 .gitignore 文件、根目录下的 /fw/bin/ 和 /fw/sf/ 目录;
git rm --cached Application/Common/Conf/config.php 删除文件 只从暂存区删除
git rm 文件名 删除文件 从暂存区和工作区删除
git rm 文件名 删除文件 从暂存区和工作区删除
git rm -f 文件名 强行移除修改后文件(从暂存区和工作区中删除)
查看分支
git branch -a 查看所有分支
git branch -l 查看本地所有分支
git branch -r 查看远程所有分支
git branch -vv 查看本地分支和远程分支的关系
分支管理
git branch <branchname> 创建分支命令
git branch mybranch 创建mybranch分支
git checkout <branchname> 切换分支命令
git checkout mybranch 切换到mybranch分支
git branch -d <branchname> 删除分支
git branch -D <branchname> 强制删除分支
git branch -d mybranch 删除mybranch分支
git merge <branchname> 合并分支
git merge mybranch //将mybranch分支合并到主分支去
建立当前分支与远程分支的映射关系:
git branch -u origin/master 表示当前分支对应远程 origin/master分支
或
git branch --set-upstream-to origin/master 关联远程分支 表示当前分支对应远程 origin/master分支
git branch -r 查看所有远程分支
git fetch origin 远程分支名x:本地分支名x 拉取远程分支 (使用该方式会在本地新建分支x,但是不会自动切换到该本地分支x,需要手动checkout。采用此种方法建立的本地分支不会和远程分支建立映射关系。)
git checkout -b 本地分支名x origin/远程分支名x (使用该方式会在本地新建分支x,并自动切换到该本地分支x。采用此种方法建立的本地分支会和远程分支建立映射关系。)
远程仓库的使用
添加远程仓库
git remote add <repository name(仓库名称)> <repository url(仓库地址)>
git remote add pb https://github.com/skyaoshi/as_test1.git
修改仓库地址
git remote set-url <repository name(仓库名称)> <repository url(仓库地址)>
git remote set-url origin https://github.com/skyaoshi/as_test1.git
储存 git stash
1. git stash save "save message" 执行存储时,添加备注,方便查找,只有git stash 也要可以的,但查找时不方便识别。
2. git stash list :查看stash了哪些存储
3. git stash show :显示做了哪些改动,默认show第一个存储,如果要显示其他存贮,后面加stash@{$num},比如第二个 git stash show stash@{1}
4. git stash show -p : 显示第一个存储的改动,如果想显示其他存存储,命令:git stash show stash@{$num} -p ,比如第二个:git stash show stash@{1} -p
5. git stash apply :应用某个存储,但不会把存储从存储列表中删除,默认使用第一个存储,即stash@{0},如果要使用其他个,git stash apply stash@{$num} , 比如第二个:git stash apply stash@{1}
6. git stash pop :命令恢复之前缓存的工作目录,将缓存堆栈中的对应stash删除,并将对应修改应用到当前的工作目录下,默认为第一个stash,即stash@{0},如果要应用并删除其他stash,命令:git stash pop stash@{$num} ,比如应用并删除第二个:git stash pop stash@{1}
8. git stash drop stash@{$num} :丢弃stash@{$num}存储,从列表中删除这个存储
9. git stash clear :删除所有缓存的stash
注意 : 说明:新增的文件,直接执行stash是不会被存储的 (没有在git 版本控制中的文件,是不能被git stash 存起来的。)
查看日志
git log 显示日志
git log -p -[num] 显示最近几条提交的日志(包含修改的内容)
中文日志乱码修复
git bash 中输入下面命令
git config --global i18n.commitencoding utf-8
git config --global i18n.logoutputencoding utf-8
export LESSCHARSET=utf-8
git 还原版本
还原版本时要选中某个文件,将该文件还原到这个版本号(默认是将此次提交的所有文件恢复到该版本)
让git记住账号密码
[credential]
helper = store
回到合并之前
git branch list
master
pre_prod *
合并master分支
git merge master
出现冲突 回到合并之前
git merge --abort