快速入门:这里
Git的撤销与回滚:这里
AndroidStudio种的Git配置与使用:这里
19个基础步骤,快速梳理Git操作。
1.Git配置作者信息:
git config --global user.email 'xxx'
git config --global user.name 'xxx'
--global是全局,可以去掉他就是局部的。注意实际使用中全局与局部的优先级。
2.创建新仓库:
git init
维护旧仓库:
git clone ....git
3.Git流水线操作:
//初始化仓库
git init
//查看状态
git status
//添加到暂存区
git add .
//提交到版本库
git commit -m 'xxx'
4. .gitignore[配置忽略文件]:
在该文件中配置不想监测的文件。文件夹里必须要有文件,否则不跟踪本文件夹。
创建.gitignore文件,然后假如我不想提交a.txt,就把a.txt写进去,或者*.txt代表所有txt文件都不提交。如果说,除了a,其他的都不提交,就!a.txt。
5.版本库中删除资源:
//默认版本库和本地的文件都会删除
git rm xxx
//只删除版本库中的,不删除本地的
git rm --cached xxx
6.版本库中修改文件的名称:
假如说我想修改版本库中的a.txt重命名为b.txt
git mv a.txt b.txt
修改后别忘记add 并commit哦
7.通过日志查看历史操作:
//通常
git log
//查看日志及其变动信息
git log -p
//查看最近的n次提交【n换成具体的整数】
git log -p -n
//精简显示
git log --online
//查看那些文件发生了变化
git log --name-only
//查看哪些文件发生了变化以及文件什么类型的变化【例如A增加 M修改】
git log --name-status
8.使用amend修改最新一次提交事件:
git commit --amend
9.管理暂存区中的文件:
add后,我后悔了,从暂存区中撤销这个文件
(1):针对第1次放入暂存区的文件:
git rm --cached xxx
(2):针对2次及以上放入暂存区的文件:
git reset HEAD 暂存区中的文件名
恢复到上一次提交的内容:
git checkout --文件名
10. -alias命别名:
比如git add 命令,我想用自定义的git a来表示。
git config --global alias.a = add
当然,你完全可以打开配置文件,然后在配置文件里手动添加配置,而不是通过长串的命令。
11.分支:
默认是master主分支。【HEAD是指针,指向当前所在的分支。这里提醒一下,commit后才有分支哦!】
- 创建新分支:git branch 分支名
- 切换到某分支: git checkout 分支名
- 查看当前所在的分支: git branch
- 综合方式【创建并切换到新的分支】:git checkout -b 新分支名
- 分支的合并:git merge 被合并的分支名
- 分支的删除: git branch -b 分支名
11.1 处理分支冲突:【不同的分支修改同一文件造成的不同】
假设有2个分支,修改了master上的一个文件,他们都修改了a.txt,但是修改的内容不同。合并其中一个的时候没问题,合并剩下的一个的时候会造成冲突。这时就需要mater的开发者自己处理不同的文件内容,自己决定保留那部分内容。
比如:
<<<<<<<<HEAD
测试1
==============
>>>>>>>>>>另一个分支名
测试2
这时,我修改为如下,该删的删:
测试1
测试2
然后add commit 一下。
11.2 分支管理:[--merged 与 --no-merged]及分支强制删除操作:
- 查看已经合并的分支:git branch --merged
- 查看未合并的分支: git branch --no-merged
- 强制删除分支【这是针对于未合并到master的分支是不能用git branch -d 删除分支的】:git branch -D 分支名
11.3 Stash临时储存区:
这个的作用是add后,文件修改一半临时i想要切换到其他分支,且此时因为没做完不想commit。
git stash
这个命令的作用是立马切换到其他分支,会被不允许这样就可以把当前工作状态缓存起来。
然后通过
git stash list
这个命令可以查看临时存储区。然后就可以正常切换到其他分支。
最后再回到该分支,恢复暂存区:
git stash apply
【stash临时存储区依然存在】
//删除对应索引的临时存储区。
git stash drop stash @{0}
//这里的0是相对于git stash list 的索引
恢复存储区后没用了可以直接删除:
git stash pop
【git stash 必须要先add到暂存区,即要在add / commit后(跟版本库关联后)才能使用。】
12.TAG标签:
某一阶段的阶段总结或者声明。这个阶段一定是正式完成的且是稳定的版本。
- 显示当前标签的列表:git tag
- 打标签: git tag 标签名 【例如:git tag v1.0.0】
//设置并上传tag
git tag -a 'tag...' -m 'description...'
git push --tags
//查看存在的tag
git tag -l
//切换到某个tag
git checkout tag_name
13.生成zip代码发布压缩包:
git archive master --prefix = 'xxx/' --forma=zip > xxx.zip
master是指的master分支,prefix的值是压缩后的文件夹的名字
14.rebase操作:
该命令很简单:
git rebase master
但是需要仔细理解一下。
该命令用于希望时间线不要有分支操作(commit等)。如果产生冲突的时候希望分支作者自己解决冲突,而不是mater开发人员去解决。一个很好的例子就是开源项目,一位coder助力提高项目,然后commit发现和master产生了冲突。【其实本质就是mater分支的时间线与子分支的时间线不同步的问题】
这是个人项目的操作情况:【master分支没任何变化】
但是开源项目等:【master变化,子分支也变化,2者不同步】
图解:为了解决这个冲突,肯定要移动master或者test分支保持到最新的同步时间线上。这里当然是子分支的移动。
通过如下命令实现移动test分支到最新:
git rebase master
然后合并冲突
git merge test
15.clone然后自动与远程服务器关联:
git clone ...
cd ....
//显示master分支了
git push
//推送到远程
16.本地版本库主动使用remote与远程github关联:[本地作为主角和上面的15比较,他们的主动方不同]
git init
git commit -m ''
本地与远程关联:
git remote add origin .....git
然后想服务器推送代码到master分支
git push -u origin master
当出现如下错误时:
使用git push origin master
如果还是错误,建议您pull到本地然后推送
git push -u origin master 上面命令将本地的master分支推送到origin主机,同时指定origin为默认主机,后面就可以不加任何参数使用git push了。
git push,默认只推送当前分支,这叫做simple方式。此外,还有一种matching方式,会推送所有有对应的远程分支的本地分支。Git 2.0版本之前,默认采用matching方法,现在改为默认采用simple方式。
17.本地分支与github远程分支同步:
- 显示远程分支: git branch -a
例如,git checkout -b test
*test
master
远程分支
这时推送会报错fatal:当前分支未与远程分支进行关联:
git push --set-upstream origin test
18.远程分支的删除:
- git push origin --delete 远程分支名
删除本地分支:
- git branch -d 分支名
19.git的自动部署:[官方说明:webhook实现自动部署]
jenkins、linux的定时部署等都可以。
- 先配置github的钩子hook
- 构建web服务器上的请求文件的代码[假设web服务器有webhook.php文件。具体代码Google吧]
这里简单提一下配置github的hook:
选择一个仓库: