git个人使用总结

一、基础命令

快照类操作:add、status、diff、commit、reset、rm、mv

分支类基本操作:branch、checkout、log、stash

分享及更新项目基本操作:pull、push

 

组合场景操作:

获取代码:创建仓库(UI)、clone

提交代码:add、status、diff、commit、reset

分享代码:branch、push

更新代码:stash、rebase、pull

阅读代码:checkout、log

贡献代码:fork、merge request

 

二、以下为具体操作与截图

1、获取代码

在git bash命令下执行git clone <git下载地址>,例如:git clone git@git.scm.test.com:zhanyuyi/git_basic_homework.git

 

2、 建立.gitgnore

(1)第一次提交代码前,建立.gitignore,在git bash命令下执行touch .gitignore即可生成

(2)建立.gitignore后,提交

//添加.gitignore文件到暂存区

git add .gitgnore

//提交

git commit -m "chore:添加.gitgnore,忽略不需要版本跟踪的文件"

(3)用文本编辑器如editplus或notepad++输入需要忽略的文件或文件名,一般可忽略的文件有以下:

##ignore this file##
/target/ 

.classpath
.project
.settings      
 ##filter databfile、sln file##
*.mdb  
*.ldb  
*.sln    
##class file##
*.com  
*.class  
*.dll  
*.exe  
*.o  
*.so  
# compression file
*.7z  
*.dmg  
*.gz  
*.iso  
*.jar  
*.rar  
*.tar  
*.zip  
*.via
*.tmp
*.err 
# OS generated files #  
.DS_Store  
.DS_Store?  
._*  
.Spotlight-V100  
.Trashes  
Icon?  
ehthumbs.db  
Thumbs.db  

 

备注:

/target/ :过滤文件设置,表示过滤这个文件夹

*.mdb  ,*.ldb  ,*.sln 表示过滤某种类型的文件
/mtk/do.c ,/mtk/if.h  表示指定过滤某个文件下具体文件
 !*.c , !/dir/subdir/     !开头表示不过滤
 *.[oa]    支持通配符:过滤repo中所有以.o或者.a为扩展名的文件

该方法保证任何人都提交不了这类文件

 

3、提交代码

本地working directory、staging area暂存区、local repo三个区域间切换关系

提交代码前需要做好2点,第一,一次提交只做一件事;第二,review后才提交。

通常为以下步骤:

//步骤1:查看本地仓库状态

git status

//步骤2:添加认为本次提交应包含的文件到暂存区

git add file1

...

//步骤3:review暂存区内容

git diff --cached

//若review发现问题,则继续修改,然后再add,直到满意

...

//步骤4:提交到本地仓库

git commit -m "feat:新增a.java"

//步骤5:提交到远程仓库

git push

有提交必然有提交日志,提交日志格式:

<type>(<scope>):<subject>

//空一行

<body>

提交日志规范如下:

type
用于表示commit的类别,允许用下面8个标识
ftr/(feat):新功能(feature)无ftr历史原因的,请使用feat
fix:修补bug
docs:文档(documentation)
style:格式(不影响代码运行的变动)
refactor:重构(即不是新增功能,也不是修改bug的代码变动)
test:增加测试
chore:构建过程或辅助工具的变动
conflict:解决冲突

scope
用来标识当前提交代码的影响范围 如果jira单对应,用(#jira
-1)的格式来标准(如果jira单对应feat或fix,强制性添加) 如果没jira单对应,则按层级描述代码的影响范围(eg:view,viewmodel,net,test,model,utils,protocol,presenter) 如果在代码评审工具Phabricator评审代码,在scope中加上fix的hash id 如果没合适的范围,可以不填

subject
是commit目的的简短描述,不超过50个字符。
以动词开头
结尾不加句号(。)或句点(.)

body
是对本次commit的详细描述,可以分成多行

提交范例:

有jira单例子
ftr(#JIRA-1):完成计算器加减开发

计算器加减法功能完成
-添加加减法计算UI
-添加错误提示样式
没jira单例子
refactor(viewmodel):重构add viewmodel部分代码,提高性能

add计算逻辑优化
-整型改为浮点型计算

 

4、合并代码

合并他人分支时,例如需要把task_TEST-1_zhanyuyi合并到master分支

第一,若不在master分支,使用git checkout master把当前分支切换到master分支;

第二,使用git merge task_TEST-1_zhanyuyi后,确定merge成功;

第三,使用git push,把当前的master分支推送到远程master分支;

 

5、分享代码(创建分支、推送到远程分支)

第一,创建专属分支git branch <分支名>,分支命名规则:<任务类型>_<任务序号>_<姓名拼音缩写>,例如:task_JIRA-1_zhanyuyi

第二,第一次push到远程分支(在远程仓库创建分支并绑定到本地同名分支),git push -u origin <分支名称>

第三,非首次push到远程分支,git push

 

以下为本地常用分支操作

//查看分支
git branch

//创建分支
git branch <分支名>

//切换分支
git checkout <分支名>

//创建+切换分支
git checkout -b <新分支名字>

//删除分支
git branch -d <需删除的分支名>

 

 6、更新代码

当你正在专属分支开发时时,临时需要改BUG或切换分支,可用下面的步骤

//存储所有目前带有版本跟踪的文件,并把文件恢复回和最新提交一致的内容
git stash

//去做所有想做的事情,例如改BUG,切分支

//搞定想做的事情后,准备继续前面的工作,切回原分支
git checkout <原工作分支名字>

//把第一步存储的文件全部恢复回来
git stash pop

然而无专属分支时,确实需push

//存储所有目前带有版本跟踪的文件,并把文件恢复回和最新提交一致的内容
git stash

//获取远程仓库最新代码,并应用到本地
git pull

//推送远程仓库
git push

//把第一步存储的文件全部恢复回来
git stash pop

 

在上面步骤看到git pul可以获取远程仓库最新代码并应用到本地,其实git pull效果等价于git fetch+git mergre<本地当前分支名>

副作用:若pull时,本地有代码没push,会产生一次merge提交。不推荐在没有进行stash的前提下pull,容易冲突。

副作用解决方法:为了同步公共分支最新内容,用git fetch+git rebase origin/<本地当前分支名称>代替git pull

例:
git fetch origin

git rebase origin/<本地当前分支名>

 

7、阅读代码

当你正在一个分支,突然想看看别人分支的代码,可以用以下方法

//先把正在编辑的分支保存起来
git stash

//查看当前分支提交日志
git log

//查看日志,一行一行阅读日志
git log --online

//切换到指定提交后的状态
git checkout <单次提交的sha-1>


//做你想做的事情
。。。
//最后,记得把第一步存储的文件全部恢复回来
 git stash pop

看到这里,<单次提交的sha-1>相信大家疑问在哪里取,其实,在查看日志每个提交开头,7位,类似b76a6c5,如果切换到前一个提交后,一切正常还想看看前前一个提交如何,就用下面的方式

//查看上一个提交改了什么
git log -p <提交的sha-1>

 

8、贡献代码

在网页fork,然后merge request

 

三、GIT网页操作

1、版本对比

 

 【compare】后,展开两个版本修改内容,绿色代表新增,红色代表删除。展开某个类后,选择右侧的【Side-by-side】做左右对比

 

 

 

2、用到继续写

 

四、案例

1、提交代码时无代码冲突

git add . #将修改文件添加到暂存区
git commit -m'add at' #提交代码
git push origin your-branch-name #推送本地更待到远程仓库

 

2、提交代码时有代码冲突

2.1 拉取最新代码(fetch & merge/rebase)

需从远程仓库拉取最新代码到本地仓库。可选择合并(merge)或变基(rebase)来整合这些变更。

合并(merge)

如果合并时出现冲突,Git会提示你解决冲突。需手动编辑冲突的文件,解决冲突后,添加(git add .)这些文件,然后提交合并结果(git commit

git fetch origin  # 从远程仓库获取最新的代码,但不合并 
git merge origin/your-branch-name # 将远程分支合并到你的本地分支
git add . #将修改文件添加到暂存区
git commit -m'add at' #提交代码
git push origin your-branch-name #推送本地更待到远程仓库

 

变基(rebase)

想保持一个线性的提交历史,可以使用变基。变基同样可能产生冲突,解决冲突的方式与合并相同。解决后,使用git rebase --continue继续变基过程,或如需放弃当前的变基操作,使用git rebase --abort

git fetch origin # 从远程仓库获取最新的代码,但不合并 
git rebase origin/your-branch-name
...(若有冲突则解决)
git rebase --continue
...
git add . #将修改文件添加到暂存区
git commit -m'add at' #提交代码
git push origin your-branch-name #推送本地更待到远程仓库

 

2.2 解决冲突

当Git提示存在冲突时,需打开有冲突文件,查看并手动解决冲突。冲突部分通常被标记为<<<<<<<=======,和>>>>>>>。需决定保留哪部分代码,或将两部分代码合并。

 

2.3 提交解决后的冲突

无论通过合并还是变基,一旦冲突解决,都需将修改的文件添加到暂存区(git add .),然后提交(git commit)。如果是通过合并解决冲突,Git可能会自动创建一个合并提交;如果是变基,可能需要手动提交。在2.1 已有相关案例

git add .    
git commit -m'add at'

2.4 推送本地更改到远程仓库

在2.1 已有相关案例

git push origin your-branch-name

 

五、git技术栈脑图

(从简书上搜索的https://www.jianshu.com/p/e73b2bf0f62f

 

 

 

 

posted @ 2017-09-29 18:08  优雅de宇  阅读(2053)  评论(0编辑  收藏  举报