> d:/diff/exportname.diff //将输出信息重定向 工作区。git|git & Android Studio。" />

git|git & Android Studio

基础命令
$ git init //初始化仓库 $ git add [文件名] $ git commit - m"[注释]" $ git status//查看结果 $ git diff//查看变化 $ git version //查看版本 $ git 命令 >> d:/diff/exportname.diff //将输出信息重定向

工作区、暂存区和版本库
工作区有一个隐藏目录 .git 是 Git 的版本库,库里存了很多东西,其中最重要的就是称为 stage(或者叫 index)的暂存区。
把文件往 Git 版本库里添加的时候,是分两步执行的:
第一步是用 git add 把文件添加进去,实际上就是把文件修改添加到暂存区;
第二步是用 git commit 提交更改,实际上就是把暂存区的所有内容提交到当前分支(版本库)。
关于用户
获取名字和地址
Git config user.name
Git config user.email
本地的版本更新
git log //查看提交历史 git reflog //查看命令历史 git reset --hard HEAD~1 // 后面的数字是前面第几个 git reset --hrad [id]$ rm test.txt //从工作区删除 $ git checkout -- test.txt //从版本库恢复到工作区 $ git rm test.txt //从版本库中删除$ git checkout . //将工作区的所有修改丢弃,可以指定文件和文件的类型

远程库
$ git remote add origin git@github.com:CMXJteam/BanMa.git
$ git remote rm origin
$ git remote -v
用 origin 名字来代表远程库BanMa;删除;查看远程库。
$ git push -u origin master //第一次提交,将 master 分支的内容 push $ git clone git@githun.com:CMXJteam/BanMa.git $ git pull <远程主机名> <远程分支名>:<本地分支名> //取回远程主机某个分支与本地的指定分支合并 $ git fetch <远程主机名> <远程分支名>:<本地分支名> //从远程获取最新版本到本地,不会自动merge

分支
分支是什么?原理是什么?
$ git branch //查看分支 $ git branch //创建分支 $ git checkout //切换分支 $ git checkout -b //创建+切换分支 $ git merge //合并某分支到当前分支 $ git branch -d //删除分支 $ git diff //查看不同分支的不同

团队合作
参考 使用Git进行团队开发
$ git branch -a //查看所有包括远程仓库的分支 $ git fetch <远程主机名> <远程分支名>:<本地分支名> $ git merge //合并

【git|git & Android Studio】解决冲突
git status 显示有冲突的文件,文件里面会添加像下面的冲突标识符:
<<<<<<< HEAD:file.txt Hello world ======= Goodbye >>>>>>> 77976da35a11db4580b80ae27e8d65caf5208086:file.txt

编辑解决冲突,把冲突标识符删掉然后提交
git add . + git commit
如果不满意可以用 git refloggit reset 返回到合并前的版本
代码的回滚
  • Reset
可以将 HEAD/文件 指向指定的分支内容。
例如 git reset HEAD~2 会将 HEAD 指向两个提交之前的分支,这时 HEAD 之后的两个提交变成了悬挂提交,将会在 Git 执行垃圾回收的时候被删除。
Reset 的重点在于可选参数:
git reset --mixed 默认选项。缓存区变化,但工作区不受影响。
git reset --soft 缓存区和工作区都不会被改变。
git reset --hard 缓存区和工作区都同步到指定的提交,也就是说在这之后的提交再也找不回,是非常危险的操作。
如果 reset 后面接文件路径:git reset HEAD~2 MainActivity.java 会将缓存区中的指定文件回滚而工作区不变。
  • Revert
撤销一个提交的同时会创建一个新的提交。git revert HEAD~2 会在当前的 HEAD 后新增一个提交,内容则是 HEAD~2 的内容。
这也是团队合作里在公共分支常用的。
修改 Git Bash 打开的默认目录
私以为这个还是非常有必要的,不然每次都要跳转好一段路径...
找到快捷图标,属性->起始位置,修改为想要跳转的路径。
要注意在「目标」一栏,有可能会有一句 --cd-to-home ,需要删掉:
git|git & Android Studio
文章图片
Git Bash
Git 保存密码
用 https 时经常需要输入密码,其实可以设置为保存密码以自动输入:
$ git config credential.helper store

.gitignore 忽略文件
在开发中有很多生成的缓存文件、日志文件等无需同步到仓库的文件,这时候一般我们通过添加 .gitignore 文件来设置忽略的规则。
除了编写 .gitignore 文件外,还可以在 .git/info/exclude 文件下编写规则,特点是只对本地的提交。
Android Studio 中使用 Git 的一些要点
  • 右键没有 Git 选项:

    git|git & Android Studio
    文章图片

    上图的 Git 选项有时候会莫名其妙的消失,可以在 Preferences -> Version Control 针对项目添加。

    git|git & Android Studio
    文章图片
  • 使用自带的图形化界面来解决冲突:
    右键文件夹/文件 -> Git -> Resolve Conficrs

    git|git & Android Studio
    文章图片

    因为提交、合并习惯在 Terminal 里用命令行进行,所以有时候出现了冲突并不会自动弹出图形化解决冲突的界面。
    如果用 AS 的 VCS -> Git 里的操作应当不会又这种问题。

    推荐阅读