git命令

一、重要概念

caci5.png

二、常用命令

git -h
git xx -h

-n 仅测试 不做实际操作
-f  强制操作
-r  文件目录递归

git init    //初始化,生成.git文件
git add .  //将当前目录以及子目录下被修改、新建/删除的文件添加到暂存区
git add -u .  //将修改、删除的文件加入暂存区 不包括删除的文件
git add -i . //查看暂存区已被add未提交的文件状态 且可以操作
git add  -n --ignore-missing .  //测试是否被忽略文件忽略

git commit [file...] -m"提交信息"  //提交文件 file可以不通过add直接提交
git commit --amend      //修改上一次comment 会进入编辑界面
git commit --amend -m"" //覆盖上一次comment
git commit -am""        //相当于git add . -u / git commit -m""

git rm <file>        //删除一个文件 包括暂存区和工作区
git rm -r <dir>    //删除 dir 下的所有文件
git rm --cached <file>  //删除暂存区的文件 保留工作区文件

git reset [HEAD]  回退历史代码
--soft    //回退到指定index 但是不重置暂存区 已经commit的回退到add完的状态
--mixed  //默认 回退到指定index并重置暂存区代码 已经commit的回退到add前的状态
--hard  //回退到指定index 重置暂存区、工作区
git restore --staged <file> //将暂存区内容恢复到工作区 不撤销修改
git restore <file> //将暂存区内容恢复到工作区  撤销修改

git status -s   //精简的方式显示文件状态
git status -uno //只列出所有已经被git管理的且被修改但没提交的文件
git status -sb  //精简的方式显示文件状态 并打印当前分支

git diff <file>     //比较当前文件和暂存区文件差异
git diff <id1><id2> //比较两次提交之间的差异
git diff <branch1> <branch2> //在两个分支之间比较
git diff --cached    //暂存区和本地仓库的对比
git diff            //工作区和暂存区的对比
git diff HEAD       //工作区和本地仓库的对比

git branch  //列出本地分支
git branch -r   //列出远端分支
git branch -a   //列出所有分支
git branch -d   //删除已merge过的分支 (试了也可以直接删除?)
git branch -D [-r]  //强制删除分支 (需要切到其他分支才能删除需要删除的分支)
git branch --show-current   //展示当前分支名
git branch <branch1>    //基于当前分支创建新分支
git branch -m <old_branch> <new_branch> //分支改名
git branch --set-upstream-to origin/<new_branch>//本地分支与远程分支关联

git checkout -- <file> //从索引中恢复文件
git checkout <branch1>  //切换分支
git checkout -b <branch1>   //创建并切换到新的分支
git checkout -b <branch1> origin/<remotebranch> //将远端分支拉到本地
git checkout <branch1> <file> //从branch1中取出file文件

git merge <branch> //将branch合并到当前分支
git merge --no-ff <branch>  //总会生成一个合并commit
git merge -Xignore-space-change <branch> //完全忽略 空白修改

git log //查看提交历史
git log -p  //查看提交历史 会列出改动内容
git log -n  //查看最近n次提交记录
git log --stat  //查看提交记录的简略统计
git log --graph //展示提交历史的分支结构
git log -S "xxx"    //列出字符串xxx加到项目中的commit -G支持正则
git log -- <file>   //只查看某个文件的commit
git log --after="20122-7-1" --before="2022-7-4" //按时间段查询commit after和before可以单独使用
git log  --abbrev-commit //以简短的形式打印commit id
git log --grep="xxx" //查找包含commit内容的记录
git log <tag>   //查询tag之后的提交记录 不包括tag
git log <commit> //查询commit之前的记录,包含commit
git log <commit1> <commit2> //两个commit之间的记录,包括commit1和commit2
git log commit1..commit2 //同上,但是不包括commit1
git log --oneline //只展示commit id和内容

git log --graph --pretty='%Cred%h%Creset -%C(auto)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --all

git reflog  //查看所有更改过的commit 然后使用reset --hard 恢复
git reflog show <branch> //展示某个分支的commit

git tag -l [正则]//列出所有简短的tag名称
git tag -a <tag> -m "xxx"   //添加标签和备注
git show <tag>  //打印tag的详细信息
git tag <tag>  //添加tag
git tag -a <tag> <commit id>    //给特定commit添加tag
git tag -d <tag> //删除tag
git push origin <tag>   //上传tag
git push origin --delete <tag> //删除远端tag

git rebase  //把本地未push的分叉提交历史整理成直线 尽量避免使用

//添加暂存区和已跟踪未添加的修改 -u 添加未跟踪的修改 -a 添加所有文件
git stash [save 'message'] //暂存工作区修改
git stash list //查看所有的stash
git stash show [-p] [stash@{n}]//查看修改 默认对比第一个
git stash pop   //删除第一个修改 并将修改应用到工作区
git stash apply //将修改应用到工作区 但不修改
git stash drop <stash@{n}>//删除第n个暂存
git stash clear
git stash branch <branch1> <stash@{n}>//将stash创建为分支 并删除此stash

git fetch       //将远程库的数据下载到本地库 工作区不更新
git fetch origin  //拉取origin下所有分支
git fetch <branch> origin/<remotebranch>

git cherry-pick commit1    //将一个提交合并到当前分支
git cherry-pick (commit1...commitn] //将多个提交合并到当前分支 不包括commit1

git push origin <branch> //将本地分支推送到远端分支 分支名相同
git push origin <branch>:<remotebranch> [-f]//将本地分支推送到远端分支
git push origin --delete <branch> //删除远端分支

.gitmodules文件内容
[submodule "lib/spacetime"]
  path = lib/spacetime
  url = https://github.com/spencermountain/spacetime.git

git submodule add url  //添加子模块
git submodule  //查看所有子模块
git submodule update --init --recursive  //拉取远端子模块
git submodule init  //初始化子模块 
git submodule update  //更新项目内子模块到最新版本
git submodule update --remote   //更新子模块为远程项目的最新版本
git submodule foreach 'git pull origin master' //子模块统一执行git命令
删除子模块: .gitmodules->.git/config->.git->git commit->git push

hooks
可以将git更改后 执行脚本文件

https://zhuanlan.zhihu.com/p/521707440

三、疑难问题记录

3.1 本地开发代码已提交,提交后发现这次提交的代码有问题,或者漏提交了一些文件,此时,希望达到以下目的:

①修改有问题的代码。
②补足漏提交的文件(一般是新增的文件没有git add .)
③把以上2点相关的代码,和前一次提交的代码合并成1个提交。
④给合并后的这个提交添加新的注释。
快搜解决办法:
--》修改问题代码
--》git add . (把漏提交的文件假如暂存区)
--》执行git commit --amend -m "这里填写提交的注释"

3.2 新建并关联远端

echo "# -" >> README.md
git init
git add README.md
git commit -m "first commit"
git branch -M master
git remote add origin https://github.com/with-dream/-.git
git push -u origin master

四、异常

4.1 error: failed to push some refs to

https://blog.csdn.net/github_50517091/article/details/115628500

五、版本控制及git flow

20180803135443287.png

master
主分支 , 产品的功能全部实现后 , 最终在master分支对外发布
该分支为只读唯一分支 , 只能从其他分支(release/hotfix)合并 , 不能在此分支修改
另外所有在master分支的推送应该打标签做记录,方便追溯
例如release合并到master , 或hotfix合并到master

develop
主开发分支 , 基于master分支克隆
包含所有要发布到下一个release的代码
该分支为只读唯一分支 , 只能从其他分支合并
feature功能分支完成 , 合并到develop(不推送)
develop拉取release分支 , 提测
release/hotfix 分支上线完毕 , 合并到develop并推送

feature
功能开发分支 , 基于develop分支克隆 , 主要用于新需求新功能的开发
功能开发完毕后合到develop分支(未正式上线之前不推送到远程中央仓库!!!)
feature分支可同时存在多个 , 用于团队中多个功能同时开发 , 属于临时分支 , 功能完成后可选删除

release
测试分支 , 基于feature分支合并到develop之后 , 从develop分支克隆
主要用于提交给测试人员进行功能测试 , 测试过程中发现的BUG在本分支进行修复 , 修复完成上线后合并到develop/master分支并推送(完成功能) , 打Tag
属于临时分支 , 功能上线后可选删除

hotfix
补丁分支 , 基于master分支克隆 , 主要用于对线上的版本进行BUG修复
修复完毕后合并到develop/master分支并推送 , 打Tag
属于临时分支 , 补丁修复上线后可选删除
所有hotfix分支的修改会进入到下一个release

主要工作流程
1 . 初始化项目为gitflow , 默认创建master分支 , 然后从master拉取第一个develop分支

2 . 从develop拉取feature分支进行编码开发(多个开发人员拉取多个feature同时进行并行开发 , 互不影响)

3 . feature分支完成后 , 合并到develop(不推送 , feature功能完成还未提测 , 推送后会影响其他功能分支的开发)
合并feature到develop , 可以选择删除当前feature , 也可以不删除 . 但当前feature就不可更改了 , 必须从release分支继续编码修改

4 . 从develop拉取release分支进行提测 , 提测过程中在release分支上修改BUG

5 . release分支上线后 , 合并release分支到develop/master并推送
合并之后 , 可选删除当前release分支 , 若不删除 , 则当前release不可修改 . 线上有问题也必须从master拉取hotfix分支进行修改

6 . 上线之后若发现线上BUG , 从master拉取hotfix进行BUG修改

7 . hotfix通过测试上线后 , 合并hotfix分支到develop/master并推送
合并之后 , 可选删除当前hostfix , 若不删除 , 则当前hotfix不可修改 , 若补丁未修复 , 需要从master拉取新的hotfix继续修改

8 . 当进行一个feature时 , 若develop分支有变动 , 如其他开发人员完成功能并上线 , 则需要将完成的功能合并到自己分支上
即合并develop到当前feature分支

9 . 当进行一个release分支时 , 若develop分支有变动 , 如其他开发人员完成功能并上线 , 则需要将完成的功能合并到自己分支上
即合并develop到当前release分支 (!!! 因为当前release分支通过测试后会发布到线上 , 如果不合并最新的develop分支 , 就会发生丢代码的情况)

https://blog.csdn.net/xingbaozhen1210/article/details/81386269

gitflow命令行

brew install git-flow
git flow init

feature/develop/release

git flow feature [list]
git flow feature start
git flow feature finish
git flow feature publish
git flow feature track
git flow feature diff
git flow feature checkout
git flow feature rebase
git flow feature pull
git flow feature delete
git flow feature rename


参考:
git官网
https://www.cnblogs.com/Y-S-X/p/8372741.html
https://blog.csdn.net/abcnull/article/details/90288499
https://www.cnblogs.com/yelbosh/p/7471979.html
https://www.yiibai.com/git/git_status.html
https://www.cnblogs.com/sinicheveen/p/13956266.html

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,012评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,628评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,653评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,485评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,574评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,590评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,596评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,340评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,794评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,102评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,276评论 1 344
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,940评论 5 339
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,583评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,201评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,441评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,173评论 2 366
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,136评论 2 352

推荐阅读更多精彩内容