git基本操作

在git库中有一个index(stage)的区域称之为 缓存区 ,有一个指针为HEAD,

每次创建一个分支就相当于创建了一个指针,该指针指向这次提交,然后HEAD指向分支指针

例如 创建分支 dev 相当于创建了一个 dev指针指向了这次的提交点,然后将HEAD指针指向dev指针

git基本操作

git config —global user.name  '':设置git全局用户名

git config —global userl.email '':设置git全局email

git init :目录变成Git可以管理的仓库:

git add file :将工作区修改的文件添加到缓存区

git add . :将工作区修改的所有文件添加到缓存区

git commit -m ‘xxx’:将缓存区的内容提交到head中

git status :查看工作区文件状态

代码回滚

  • 向前回滚
git log :查看所有的提交日志

git log —pretty=oneline:所有的提交日志按照一行的形式展示

git reset —hard HEAD^:将版本库回滚到上一次提交的点

git reset —hard HEAD^^:将版本库回滚到上上一次提交的点

git reset —hard commit_id:将版本库回滚到某一次提交的点

向前回滚之后git log不会再看到当前版本之后的信息

  • 向后回滚
    --- 向前回滚之后又想回到后面的版本
git reflog:查看所有提交到HEAD的commit_id

git reset —hard commit_id:回滚到任意版本的版本库

文件比较

git diff :比较工作区域和缓存区的区别

git diff —cached:比较缓存区和HEAD的区别

git diff HEAD:比较工作区和HEAD的区别

放弃修改:

  • 放弃工作区的修改(没有add和commit)
git checkout — file:放弃工作区file的修改

git checkout .:放弃工作区所有修改
  • 已经add,将修改添加到缓存区

    • 放弃缓存区的修改文件
      git reset HEAD file:放弃缓存区文件file的修改

    • 放弃工作区文件的修改
      git checkout — file:放弃工作区文件file的修改

  • 已经add到缓存区,并且已经commit到HEAD中
    使用版本回去的方式修改

git log

git reset —hard commit_id
  • 删除文件

当在工作区添加一个文件,通过add+commit之后把文件添加到HEAD中

  • 需要删除工作区文件和HEAD的文件

    • 删除工作区文件
      rm file

    • 删除HEAD文件
      git rm file(此时git rm file 相当于执行了 git add . 操作)
      git commit -m 'xxx'

  • 误操作需要恢复工作区删除的文件
    git checkout — file

远程分支

  • 基本操作
git remote:查看远程仓库名称

git remote -v:查看远程仓库详细信息

git remote add origin git@github.com/xxx:关联远程仓库

git push -u origin master:将本地分支推送到远程仓库 -u代表将本地分支关联到远程分支

git remote set-url origin git@example.com:xxx/xxx.git  修改远程仓库
  • 本地创建分支同时切换到创建分支
git checkout -b local_branch:创建本地分支并且切换到创建的分支

git checkout -b local_branch origin/remote_branch:创建本地分支关联远程已经存在的分支(远程分支已经存在)

git push -u origin local_branch:推送当前分支到远程分支(远程分支跟本地分支名称相同,-u表示同时建立关联,只有第一次提供分支的时候才会加-u,一旦建立关联之后提交都不用加-u)

git branch —set-upstream-to=origin/<remote_branch> local_branch:本地分支跟远程分支建立关联(本地分支和远程分支都存在但是没有建立关联时可以使用,比如第一次推送本地分支到远程仓库的时候没有加-u之后把本地分支推送到远程仓库,但是并没有建立关联)

git branch —set-upstream local_branch origin/<remote_branch> :本地分支跟远程分支建立关联(本地分支和远程分支都存在)

git pull :拉取远程分支的代码到本地对应的分支(如果提示 “no tracking information”则需要建立本地分支与远程分支的关联)

git push origin local_branch:推送本地分支到对应的远程分支(如果本地分支已经跟远程分支建立关联可以直接使用 git push)
  • 删除分支git
git branch -d the_branch:删除本地分支the_branch

git branch -D the_branch:强行删除本地分支the_branch(当从某一个分支创建一个新分支之后,如果新的分支没有merge到派生的分支时是不允许删除的)

git branch push origin :the_branch:删除远程分支the_branch(注意origin之后有空格)

git push origin --delete <BranchName>
  • 合并分支
git merge name:合并name分支到当前分支

关于git merge:git merge name 之后 实际是将当前分支的指针指向了name分支(Fast-forward模式),然后HEAD再指向当前分支

使用Fast-forward模式时是没有merge信息的,在查看log时没有merge信息,所有尽量避免使用这种模式合并

git merge —no-ff -m ‘xxx’ name:使用普通模式合并分支顺便带上合并信息

git log —graph :查看分支合并图

git stash:将当前工作’现场’存储起来,等以后恢复现场后继续工作

使用场景:在自己分支工作,工作只做到一半,但是在短时间内无法完成任务,此时有bug需要立刻修复,此时就可以使用该命令暂时将当前工作存储起来去修复bug了,等bug修复完成之后回到该分支恢复工作现场
  • 恢复stash有两种方式:

git stash list:首先查看所有的stash:

  • 恢复stash方式一

    • git stash apply stash_id:恢复stash

    • git stash drop stash_id:删除stash内容

  • 恢复stash方式二

    • git stash pop:恢复stash同时删除了stash内容

分支管理策略:

  • master:(主分支)也是稳定分支;所有的发布版本都是从master分支发布

  • dev:(开发分支)在多人协作开发的时候开发分支是一个不稳定分支,每一个开发人员都有自己的开发分支,平时个人都是在自己的开发分支开发功能,然后等功能开发完毕了合并到dev分支;当所有的功能都开发完了再把dev分支合并到master分支

  • bug:(零时修复bug分支)当在某一个分支有bug的时候在有bug的分支创建一个bug的零时分支(一般命名为issue_001),等bug修复结束之后合并到有bug的分支,然后删除掉这个零时分支issue_001

  • feature:(新功能分支)当需要开发一个新功能时,在dev分支新建一个分支(feature-volue),等新功能开发完毕之后将新功能分支合并到dev分支,然后删除feature-volue

注意:远程分支一般只有master和dev还有一些个人分支,bug分支只是在本地的零时分支,等bug修复完merge到相应的分支就可以,feature分支看情况,如果是合作开发功能的话可以推到远程分支

  • git中的标签就是一个让人容易记住的有意义的名字,它跟某个commit绑定在一起的
git tag tag_name :打标签(默认标签是打在最新提交的commit_id上的)

git tag tag_name commit_id:在指定的commit上打一个标签

git tag <-a> tag_name -m ‘xxxx’ commit_id:创建带有说明的标签-a(可以省略):指定标签名 -m:指定说明文字

git tag :显示所有标签

git show tag_name :查看标签信息

git push origin tag_name:推送一个本地分支到远程(打标签默认只是在本地存在,需要推送到远程)

git push origin —tags:推送全部未推送的本地标签

git tag -d tag_name:删除本地标签

git push origin :refs/tags/tag_name:删除远程标签

.gitignore 文件:

git add -f file:

git check-ignore -v file:
  • git 清除分支缓存
git remote prune origin

git fetch -p(效果更好)
  • git清除缓存(针对.gitignore不能忽略问题)
git rm -r --cached .

git add .

git commit -m 'update .gitignore'

git可能会遇到的问题

git pull origin master --allow-unrelated-histories


2020年11月13日更新

git统计

  • 统计git提交次数: 所有人的所有提交次数,会展示所有的提交人 提交次数详情

git log | grep "^Author: " | awk '{print $2}' | sort | uniq -c | sort -k1,1nr

  • 统计时间内提交次数

git log --author=yourname --since="2017-08-01" --no-merges | grep -e 'commit [a-zA-Z0-9]*' | wc -l

  • 统计提交行数:根据1展示出详情,可以填入username。将展示该用户增加行数,删减行数,剩余行数。

git log --author="username" --pretty=tformat: --numstat | awk '{ add += $1; subs += $2; loc += $1 - $2 } END { printf "added lines: %s, removed lines: %s, total lines: %s\n", add, subs, loc }' -

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

推荐阅读更多精彩内容