git-note-1

92 阅读4分钟

gitcmd

git操作多个库

git push  <REMOTE_NAME> <BRANCH_NAME> 
# 1. 命令默认格式如上,origin是默认的remote_name,可以随便命名
# 2. remote name,默认是origin,可以自己指定
# 3. branch name,默认是当前分支master,可以自己指定
  1. git pushgit push origin master的缩写
  2. git push/pull没有指定remote和branch时,默认从配置文件(cat .git/config)读取
  3. git remote add gitee gitee-url配置多个remote,同时管理多个版本库
  4. blog.csdn.net/weixin_4128…

git-remote

# 1. 修改命令
git remote set-url gitee <url>
# 2. 删除/增加
git remote rm gitee
git remote add gitlab [url]
# 3. 修改配置文件
./git/config
  1. tech.meituan.com/2014/03/28/…

git版本回滚

  • git reset
  • git revert 比较安全

master是默认的分支名,第一次git init系统自动生成的一个分支名,其他的分支可以自己指定; HEAD指向当前分支最新commit; 是个系统指针,默认的名字是HEAD^

git reset

# 修改HEAD指向的某个commit_id,commit_id(HEAD^默认是最新的提交)之后的提交会丢失,分支已经push;
git reset --hard [commit_id|HEAD^]; 
# 分支没有push,只是commit
git reset [commit_id | HEAD^];
# 同步远程,同步远程要强推,因为本地落后remote
git push -f; 

修改HEAD指针从最新的提交到指定的commit_id,中间的提交全部丢弃;

git revert

撤销某个分支的某个commit_id。不操作HEAD指针,比较安全

# 只撤销某个版本commit_id
git revert -n commit_id;
# 撤销commit_id后,生成会新的提交
git commit -m 'git revert commit_id';
# 直接push,因为`git revet`是生成新的commit_id
git push;

git revert -n默认当前最新的提交

git delete

  • git branch -d
  • git push origin -d
# 1.查看本地分支[远程分支|全部分支]
$ git branch [-r|-a]
# 2. 删除本地分支,删除远程分支
$ git branch -d branch-name
$ git push origin -d remote-branch-name

# 3. 批量本地删除
git branch | grep [-v] "bug" | xargs git branch -d 
# 4. 批量删除远程分支,但远程分支需要删除origin/,origin是默认的remote名字,命令已经指定
git branch -r | grep [-v] "bug" |sed s/origin\\/// | xargs -I{} git push origin -d {}

# 5. bug_1: 在远程参数删除后本地引用错误,同步远程信息到本地
git fetch origin -p 

gitignore

# 忽略 .a 文件
*.a
# 但否定忽略 lib.a, 尽管已经在前面忽略了.a 文件
!lib.a
# 仅在当前目录下忽略 TODO 文件, 但不包括子目录下的 subdir/TODO
/TODO
# 忽略 build/ 文件夹下的所有文件
build/
# 忽略 doc/notes.txt, 不包括 doc/server/arch.txt
doc/*.txt
# 忽略所有的.pdf文件在doc/ directory 下的
doc/**/*.pdf

git-tag

tag:项目管理的里程碑,tag某个完成的功能;存在2类:轻量tag,备注tag

# 1. 创建tag;分别创建带备注和不带备注的tag
$git tag tag_name
$git tag -a tag_name -m 'tag_ps'
$git tag -a tag_name commitId # 基于某个 commitid创建

# 2. 查看tag
$ git tag #所有tag
$ git tag -l '*tag_' #模糊匹配
$ git show tag_name #显示某个tag_name
$ git checkout tag_name # 切换分支

# 3. 推送remote
$ git push origin tag_name
$ git push origin --tags # 推送所有

# 4. 删除tag
$git tag -d yag_name
$git push origin -d tag tag_name # 删除远程tag

git branch manager

gitflow

git-flow.jpg

版本号命名

主版本.次版本.修订版本.日期版本_希腊字符(base,alpha,beta,RC,release)

  • 主板本:主要功能,架构,发版; ==> master柱分枝,m-版本使用tag
  • 次版本:小功能,优化; ==> 对应dev-或者fea-分支
  • 修订版本:bug修复 ==> 对应bug-分支
  • 日期版本:修改日期; ==> 开发日期,或开发阶段可以根据个人喜好使用
  • 希腊字符:版本的开发阶段 ==>开发阶段
    • base:系统架构设计,API定义
    • alpha: 开发完成,白盒测试完成
    • beta:黑盒测试,bug修复完成
    • RC: 基本无bug,正式版本
    • release:交付用户的最终版
  1. master: 产品发布分支 => 产品功能全部实现,在master对外发布.使用tag标记里程碑

  2. develop:开发分支 =>克隆master分支,独立功能开发的主分枝; [多人合作的功能主分枝:dev-]

  3. feature:子功能临时分支=>克隆develop, 多人协同开发,开发完成合并到develop并删除当前分支[单人开发的分支:fea-]

  4. release:测试临时分支=> 克隆develop, 测试代码,小的bug在本分支直接修复,测试完成合并develop并删除当前分支[4,5可以使用:bug-,测试分支可以不用]

  5. bugfix | hotfix:bug分支=>主要修复master对外发布的bug, 修复完成合并master并删除当前分支

分支/tag的命名规则

  • fea(分支说明fea|bug)/x-x-date(业务-时间)

分支命名

# dev/func/master
# dev/func/f1-1
# dev/func/f2-1
分支目录: /dev/func/是文件夹, fn是文件名(分支名),要避免冲突;否则cannot lock ref error
  • 分支命名的规则: 推荐是用-/做分割,tag的版本号使用.
    • 分支命名: dev/功能/(master|date|f1)
    • 代码版本命名