关于git使用,咱们内部服务使用gitlab,相关使用教程就再也不赘述了。 如下说的都是windows环境下使用,异曲同工。git官网android
git init
我一般不多直接在本地初始化一个仓库,你们基本都是从远程clone,即使是建立新项目,在gitlab web页面也是直接选择建立新project,而后供你们拉取进行开发。现有项目路径下(空文件夹,也能够不空),命令行模式 执行 git init 就会建立一个.git文件夹子目录,表示当前目录以及归入版本管理。git
git add
大多数状况下,用这个命令将文件添加到项目中用来追踪后续文件变化。
来自官网解释——将这个命令理解为“添加内容到下一次提交中”而不是“将一个文件添加到项目中”要更加合适。
举个例子(如下操做都在android studio中)
我先建立了一个test.txt的文件,studio就自动增长到版本控制中,此时随便编辑一下,查询状态以下,有一个文件待提交,有一个修改未在待提交,此时执行commit 只会提交建立文件的部分,不会提交编辑后的部分,能够在提交前执行一次
git add app/test.txt 而后执行提交就会提交修改后的部分,大多数状况下在项目中建立的文件都须要进行版本管理,极少数状况建立的本地文件不须要进行管理,可是在studio中建立的时候就自动添加进管理了,在commit前能够经过执行git reset HEAD 将刚建立的文件移出版本追踪(仅限于建立后未提交的文件)。web
#git status
On branch localTest
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
new file: app/test.txt
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
modified: app/test.txt
复制代码
除了移出刚建立的文件版本,还能够经过编辑仓库内的.gitignore文件来添加须要忽略的文件或者文件夹,
如下是官方例子,触类旁通能应付大多数状况了windows
# no .a files 全部.a结尾的文件不跟踪
*.a
# but do track lib.a, even though you're ignoring .a files above
# 忽略取反,我已经忽略的全部的.a文件,可是我但愿跟踪lib.a文件能够单独添加
!lib.a
# only ignore the TODO file in the current directory, not subdir/TODO
#忽略当前目录下的TODO文件,可是不会忽略子目录中的TODO
/TODO
# ignore all files in the build/ directory 忽略build目录下全部文件
build/
# ignore doc/notes.txt, but not doc/server/arch.txt 忽略doc目录下的.txt文件可是不忽略子目录中的
doc/*.txt
# ignore all .pdf files in the doc/ directory 忽略doc目录下的全部.pdf文件包括子目录
doc/**/*.pdf
复制代码
关于比较 git diff 我没用过命令,都是在studio 右键文件compare with branch丝滑得多。服务器
git commit -m "-m引号内的内容为本次提交的说明"
经过此命令提交在暂存区的修改,还能够经过添加-a 命令将已跟踪但未添加到暂存区的修改提交。
举个例子,我如今已经有了test.txt 文件,我修改内容为abc 此时,按正常流程,
我须要先 git add text.txt 再执行git commit -m "test2"才能成功提交,经过添加-a 标签,能省略add步骤
直接执行git commit -a -m "test2"成功提交刚刚的修改app
git rm
同时删除本地文件并提交,studio下这个操做直接删除后提交完事,说个特殊的,个人test.txt 上一个版本添加到追踪的,可是这个版本我不想追踪它了,可是我本地还想继续用它,只是再也不归入版本控制, 执行命令git rm --cached text.txt 此时文件text.txt依旧在本地目录里不会被删除,同时下一次提交到仓库的修改行为变成删除文件text.txtgitlab
F:\AndroidStudioProjects\test>git rm --cached app/test.txt
rm 'app/test.txt'
F:\AndroidStudioProjects\test>git status
On branch localTest
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
deleted: app/test.txt
复制代码
这个很少说了,直接git log 输出密密麻麻看得烦,能够这样
git log --pretty=oneline -5 输出最近5次提交而且单行显示,爽多了
git log --stat -5 最近5次提交信息,而且带有简略信息,好比修改了哪些文件
git reflog 查看每次head变动时的日志(包括提交),已经删除的分支也能检测,能够用来恢复误删的分支节点fetch
先说一种状况,比方说我修改了test.txt 建立了abc.txt文件,提交备注写成了“修复bug1”,可是我此次提交漏掉了abc,并且修复的是bug2,粗暴的作法是再提交一次修改完事,可是就会有两次提交记录。若是只但愿有一次提交记录,而且修正备注,能够经过--amend命令按顺序作以下操做ui
git commit -m '修复bug2'
git add abc.txt
git commit --amend
复制代码
完成后以前提交的记录就会被本次提交的记录覆盖,修正以前的提交。
已经修改但还没有提交时,撤销对某个文件的修改,studio没这么折腾,直接右键revert完事url
git checkout -- test.txt
复制代码
恢复成修改前的状态。
git remote -v 查看远程仓库简写(一般clone后自动建立的简写是origin)和地址
git remote add [remote-name] [url] 添加新的远程仓库
git remote set-url [remote-name] [url] 修改远程仓库地址
git fetch [remote-name] 拉取远程仓库信息但不会对当前工做进行合并
git pull [remote-name] 拉取数据后会尝试合并当前分支
git push [remote-name] [branch-name] 推送新分支到远程仓库
git remote rename [oldName] [newName] 修改远程仓库在本地的名称
git remote rm [remote-name] 移除远程仓库,只是移除本地与远程的关联,不是把远程服务器上的仓库给删除了。
git tag 列出全部标签
git tag -a [tagname] -m "tag说明" 一般都是打附注标签
也能够对某次修改补打标签
git tag -a [tagname] -m "tag说明" [须要打标签的提交记录哈希值前6位]
git push origin [tagname] 推送标签到远程仓库
git tag -d [tagname] 删除本地仓库上的标签
git push [remote-name] :refs/tags/[tagname] 删除远程仓库的标签
git checkout [tagname] 单纯检出打标签时的文件版本,不作修改
git checkout -b [branch-name] [tagname] 检出打标签时的文件版本并建立新分支,用于修改后提交新版本
git branch [branch-name] 建立新分支 git checkout [branch-name] 切换到指定分支 git branch -d [branch-name] 删除分支 studio右下角直接操做完成以上操做痛快 git branch -v 查看当前已有分支列表 git branch --merged 查看哪些分支已合并到当前分支 git branch --no-merged 查看哪些分支未合并到当前分支 git branch -u [oringin/branch-name] 修改当前分支跟踪的远程分支