建立
1.配置身份:
git config –-global user.name “name”
git config –-global user.email “xx@xx.com”
2.查看身份:
git config –-global user.name
git config –-global user.email
3.定位:
cd c:
cd Users/xx/AndroidStudioProjects/xx
注意路径上不能使用\或者\ , 得使用/才有效 , 如果路径上有空格,那么空格两边应该用" "包括起来.
4.建立Git仓库 : git init
成功的标志是会在项目根目录下生成一个.git文件夹
想要删除本地仓库,删除.git文件夹即可
5.和github建立起联系,在github先建立一个仓库,然后用以下命令建立起联系:
git remote add origin https://github.com/xxx/xxxxx.git
之后再用git pull origin master命令将远程的文件同步下来,之后便可以使用git push origin master命令了.
6.克隆github上的仓库到本地:
git clone https://github.com/example/test.git
7.将远程版本库上的修改同步到本地,有两种方法:
- git fetch origin master
此方法同步下来的代码并不会合并到任何分支上,而是会存放到一个origin/master分支上.
此时可以利用diff命令来查看修改的内容 : git diff origin/master
之后再调用merge命令将origin/master分支上的修改合并到主分支上即可:
git merge origin/master
- git pull origin master
相当于fetch和merge合并,可以从远程版本库上获取最新的代码并且合并到本地.
提交
1.当我们要把我们修改的过项目提交到github上,需要git add . 和git commit -m "xx"之后才可以git push origin master命令.
2.git commit -a -m “massage”可以看成是git add . 和git commit -m "massage"的结合命令,但是使用场景是当前项目改变的是对已存在文件的修改,如果当前项目出现新建文件,那么将会报Untracked files错误,这时候还是需要使用git add . 和git commit -m "massage"才可以.
3.如果commit需要提交的信息过长,我们可以利用一下格式:
//在git中回车即可跳至下一行,下一行的开头会出现">"符号,正常
git commit -m '
message1
message2
message3
'
或
git commit -m "
message1
message2
message3
"
4.nothing to commit, working tree clean的意思是这此commit提交和上次commit提交并没有修改过内容.
5.git commit -m "123"和git commit命令的区别是:
如果不加 -m参数,那么是不能直接输入message的,而是会调用一个编辑器一般是vim来让你输入这个message.
6.git push origin(或者git push)表示将当前分支推送到origin主机的对应分支
此命令可以执行的前提是当前先执行过以下命令:
git push --set-upstream origin master(master代表某个分支)
(或功能相同简洁一点的命令:git push -u origin master)
这样就不用打全部太长的这样代码了:git push origin xxxx
之所以要执行过git push -u origin master才可以git push是因为git push 如果当前分支与多个主机存在追踪关系,那么这个时候-u选项会指定一个默认主机.
7.每次文件修改之后,都需要重新add和commit,不能跳过add.
8.git commit --amend命令的作用可以看成是修改上次的commit假如我们有一个文件修改之后错了,上司叫我们修改,之后如果我们直接git commit的话,可以在git log命令中看到有新的commit,如果用git commit --amend则没有,可以看出作用是覆盖上次commit,类似修改.(参考 :https://www.jianshu.com/p/a8a2ac58f37d)
分支
1.分支是保存当前项目所有文件的状态,假如存在一个分支A,当在分支B改变某些文件时,我们切换回A,那么项目的文件都将恢复到之前分支A的状态.
2.假如我们在一个feature分支提交修改内容,再利用git push origin master命令,那是否会不会将当前feature分支修改的内容同步到远程仓库呢,答案是不会的,远程仓库无论是feature分支还是master分支都没任何变化.
3.各种分支:
develop分支,即开发分支,从master分支上检出。团队成员一般不会直接更改该分支,而是分别从该分支检出自己的feature分支,开发完成后将feature分支上的改动merge回develop分支。同时release分支由此分支检出。
release分支,即发布分支,从develop分支上检出。该分支用作发版前的测试,可进行简单的bug修复。如果bug修复比较复杂,可merge回develop分支后由其他分支进行bug修复。此分支测试完成后,需要同时merge到master和develop分支上。
feature分支,即功能分支,从develop分支上检出。团队成员中每个人都维护一个自己的feature分支,并进行开发工作,开发完成后将此分支merge回develop分支。此分支一般用来开发新功能或进行项目维护等。
fix分支,即补丁分支,由develop分支检出,用作bug修复,bug修复完成需merge回develop分支,并将其删除。所以该分支属于临时性分支。
hotfix分支,即热补丁分支。和fix分支的区别在于,该分支由master分支检出,进行线上版本的bug修复,修复完成后merge回master分支,并merge到develop分支上,merge完成后也可以将其删除,也属于临时性分支。
4.基本命令
-创建一个名为version1.0分支 : git branch version1.0
-删除分支 : git branch -D version1.0
-切换到version1.0分支 : git checkout version1.0
-查看当前项目的版本库中有哪些分支 : git branch (*号代表当前是在哪个分支上)
-合并feature-hu分支到develop分支(先跳转到develop分支上) : git merge --no-ff feature-hu
回退
1.通过回退命令可以将项目跳转到上某次commit提交 , git reset三种用法总结:
git reset –mixed HEAD~1 回退一个版本,且会将暂存区的内容和本地已提交的内容全部恢复到未暂存的状态,不影响原来本地文件(未提交的也不受影响)
git reset –soft HEAD~1 回退一个版本,不清空暂存区,将已提交的内容恢复到暂存区,不影响原来本地的文件(未提交的也不受影响)
git reset –hard HEAD~1 回退一个版本,清空暂存区,将已提交的内容的版本恢复到本地,本地的文件也将被恢复的版本替换
简单总结一下,其实就是--soft , --mixed , --hard是三个恢复等级.
使用--soft就仅仅将头指针恢复,已经add的缓存以及工作空间的所有东西都不变.
使用--mixed,就将头恢复掉,已经add的缓存也会丢失掉,工作空间的代码什么的是不变的.
使用--hard,那么一切就全都恢复了,头变,aad的缓存消失,代码什么的也恢复到以前状态.
其中HEAD~1代码代表是某次提交,有两种表达方式:
HEAD 最近一个提交
HEAD 上一次提交
HEAD 上一次的 上一次的提交(倒数第三次)
HEAD^^ 倒数 第四次的 提交
HEAD~0 最近一个提交
HEAD~1 上一次提交
HEAD2 上一次的 上一次的提交(倒数第三次)
HEAD3 倒数 第四次的 提交
2.<commit_id> 是每次commit的SHA1值,可以用git log命令看到,也可以在页面上commit标签页里找到.
git log命令可以查看我们这个项目从头到尾的所有commit.
git log -1可以看到最近的一次commit.
3.通过回退命令可以将项目跳转到上某次commit提交,我们试试跳到某个commit id , 先利用git log 看到我们需要跳的commit_id , 之后终端中执行git reset --hard commit-id
其他
1.查看距离上次提交后此工程的所有已被修改过的文件 : git status
2.查看这些被修改过的文件的具体修改内容 : git diff
(以上命令查看的是全部文件,单个文件用git diff 路径)
(其中减号代表删除的部分,加号代表添加的部分)
3.撤销未提交的已被修改的文件 : git checkout 路径
(撤销只适用于那些没有执行过add命令的文件)
4.取消已add的文件 : git reset 路径
5.查看提交记录
查看历史提交的所有信息:git log
只查看其中一条,可以在命令中指定该记录的id,并加上-1参数表示我们只想看到一条记录:
git log ce76e3cd410f6745b08a79d2a1f2fe49ac284842 -1
想要查看这条提交记录具体修改了什么内容,可以在命令中加入-p参数:
git log ce76e3cd410f6745b08a79d2a1f2fe49ac284842 -1 -p
忽略文件
1.git提供了一种可配性很强的机制来允许用户将指定的文件或目录排除在版本控制之外,它会检查代码仓库的目录下是否存在
一个名为.gitignore的文件,如果存在,则一行一行的读取这个文件中的内容,并把这些内容排除在版本控制之外。
2.android studio会帮我们自动生成.gitignore的文件.有两个,一个在根目录下,一个在app模块下.
3.根目录下.gitignore文件内容:
*.iml
.gradle
/local.properties
/.idea/workspace.xml
/.idea/libraries
.DS_Store
/build
/captures
.externalNativeBuild
app目录下的.gitignore文件内容:
/build