基础命令
$ 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 <name> //创建分支
$ git checkout <name> //切换分支
$ git checkout -b <name> //创建+切换分支
$ git merge <name> //合并某分支到当前分支
$ git branch -d <name> //删除分支
$ git diff <name1> <name2> //查看不同分支的不同
团队合作
参考 使用Git进行团队开发
$ git branch -a //查看所有包括远程仓库的分支
$ git fetch <远程主机名> <远程分支名>:<本地分支名>
$ git merge //合并
解决冲突
git status
显示有冲突的文件,文件里面会添加像下面的冲突标识符:
<<<<<<< HEAD:file.txt
Hello world
=======
Goodbye
>>>>>>> 77976da35a11db4580b80ae27e8d65caf5208086:file.txt
编辑解决冲突,把冲突标识符删掉然后提交
git add .
+ git commit
如果不满意可以用 git reflog
和 git 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 保存密码
用 https 时经常需要输入密码,其实可以设置为保存密码以自动输入:
$ git config credential.helper store
.gitignore 忽略文件
在开发中有很多生成的缓存文件、日志文件等无需同步到仓库的文件,这时候一般我们通过添加 .gitignore 文件来设置忽略的规则。
除了编写 .gitignore 文件外,还可以在 .git/info/exclude 文件下编写规则,特点是只对本地的提交。
Android Studio 中使用 Git 的一些要点
-
右键没有 Git 选项:
上图的 Git 选项有时候会莫名其妙的消失,可以在 Preferences -> Version Control 针对项目添加。
-
使用自带的图形化界面来解决冲突:
右键文件夹/文件 -> Git -> Resolve Conficrs
因为提交、合并习惯在 Terminal 里用命令行进行,所以有时候出现了冲突并不会自动弹出图形化解决冲突的界面。
如果用 AS 的 VCS -> Git 里的操作应当不会又这种问题。
网友评论