资讯专栏INFORMATION COLUMN

git 总结 (边工作,边总结,边记录)

褰辩话 / 2587人阅读

git工作实际流程(重新又梳理了一遍) git教程 正常流程

git clone [url] (本地已产生 master分支)

两种方法创建本地 dev 分支

本地创建work分支,在work分支上合并master分支上的内容

git checkout -b dev

git merge master

or

以远程master为基础创建本地dev分支

git checkout -b work origin/master

在本地分支 dev 上进行工作修改,修改完毕后

git add . (代码添加到暂存区,如果是新增的文件用 git add -A 或者接 add 文件名)

git commit -m "提交注释" (代码提交到本地版本库)

git pull origin developer (拉取远程 developer 分支上最新内容到本地)

git push origin developer (将本地 developer 分支上的内容推送到远程)

至此,整个工作流程结束!

本地分支与远程分支不同时存在的情况

本地分支存在远程没有与之对应的分支,如何将本地该分支push到远程,并在远程创建一个同名分支并与之联系?

git push origin test (如果远程不存在test分支,会在远程自动创建一个test,并与本地test分支进行联系)

或者

git push --set-upstream origin test (暂时不明白其好处)

上条命令的好处就是 下次在该分支上 push 的时候,可以直接 使用 git push 命令了,因为该分支已于远程分支建立联系了

远程分支已存在,本地想创建一个分支与远程分支建立追踪关系

git checkout -b developer origin/developer(已远程的developer分支为基础,创建本地分支)

or

git checkout --track origin/developer
(这时本地会新建一个分支名叫 developer,此时会自动跟踪远程的同名分支 developer

或者直接使用 git checkout branch_name (利用tab键补全分支名称),这样创建的分支会与远程分支建立直接联系(该方法最简单)

删除远程分支

git push origin :the_branch //删除远程 the_branch 即推送一个空的内容到远程

git分支使用
当你在写一个新功能的时候,突然万恶的产品狗提出了一个bug,并要求你一个小时内修复,这时,你只能放下手中的工作,去修复这个bug,但是,你此时并不想提交你的当前修改的代码这时怎么办呢???

git 强大的分支功能,就派上用场了

第一种方法

操作步骤:创建一个新的分支并提交修改,只需要以下几个步骤

git checkout -b bug001 // 创建bug 分支并切换

修改完成后 git add ,git commit -m ""

切换到开发分支上

  `git checkout dev`
  `dev 上 git merge bug001 ``
  `git push dev origin Developer`

提交完成后 切换回 work 分支,继续原来的工作

第二种解决办法用 git stash 命令

命令作用:备份当前的工作区的内容,从最近的一次提交中读取相关内容,让工作区保证和上次提交的内容一致。同时,将当前的工作区内容保存到Git栈中。

命令选项:

git stash 即上述功能

git stash list: 显示Git栈内的所有备份,可以利用这个列表来决定从那个地方恢复。

git stash apply stash@{x} // x:为 list 列出的编号 具体恢复哪一个备份

git stash drop stash@{X} //将记录列表中取出的对应暂存记录删除

git stash pop: 从Git栈中读取最近一次保存的内容,恢复工作区的相关内容。由于可能存在多个Stash的内容,所以用栈来管理,pop会从最近的一个stash中读取内容并恢复。

git stash clear:

清空Git栈。此时使用git等图形化工具会发现,原来stash的哪些节点都消失了。

git 删除分支

删除本地分支 git branch -D br

删除远程分支 git push origin :br (origin 后面有空格) 即:推送一个空的分支到远程的该分支

合并远程的两个分支

假如远程有两个分支 分别是 master、dev 分支,两个分支内容不同

本地有一个 master 分支

在本地建立一个 dev 分支并与远程 dev 建立联系

在 dev 分支 上 merge master 分支

将 dev 分支 push 到远程

操作命令:

git checkout -b origin/dev 建立联系

git merge master 合并master分支

git push origin dev 本地 dev 分支 push 到远程

利用 github (gh-pages 分支) 展示前端静态页面

借鉴参考自博客园文章 http://www.cnblogs.com/qianmo...

git后悔操作 https://segmentfault.com/q/10...

git reflog 用该命令找到要退回的版本的 id commit id

如果没有push到远程

版本回退 git reset --hard 版本号

-----------------------------------------------------------------------------------------------

如果该修改已经 push 到远程了

git reset --hard 版本号

本地回退之后再强制将本地的提交版本推送至远程, git push -f 分支名

-----------------------------------------------------------------------------------------------

另外两种情况

绿字变红字(撤销add) git reset HEAD .

红字变无 (撤销没add修改) git checkout 文件 或者 git checkout 目录

注意:空文件不会被 git 追踪,所以不能 add commit ,如果不提交直接删除即可,不需要特殊操作

revert

Revert 撤销一个提交的同时会创建一个新的提交。这是一个安全的方法,因为它不会重写提交历史。比如,下面的命令会找出倒数第二个提交,然后创建一个新的提交来撤销这些更改,然后把这个提交加入项目中。

git checkout hotfix
git revert HEAD~2

相比 git reset,它不会改变现在的提交历史。因此,git revert 可以用在公共分支上,git reset 应该用在私有分支上。

你也可以把 git revert 当作撤销已经提交的更改,而 git reset HEAD 用来撤销没有提交的更改。

就像 git checkout 一样,git revert 也有可能会重写文件。所以,Git 会在你执行 revert 之前要求你提交或者缓存你工作目录中的更改。

reset / checkout/ revert 撤销的区别联系

reset 远程分支
方法一:
【远程代码库回滚】:

这个是重点要说的内容,过程比本地回滚要复杂

应用场景:自动部署系统发布后发现问题,需要回滚到某一个commit,再重新发布

原理:先将本地分支退回到某个commit,删除远程分支,再重新push本地分支
操作步骤:

git checkout the_branch

git pull

git branch the_branch_backup //备份一下这个分支当前的情况

git reset --hard the_commit_id //把the_branch本地回滚到the_commit_id

git push origin :the_branch //删除远程 the_branch

git push origin the_branch //用回滚后的本地分支重新建立远程分支

git push origin :the_branch_backup //如果前面都成功了,删除这个备份分支

方法二: 不到万不得已不要使用 方法一,我就是因为方法二 push 不上去才选择的方法一

方法二:请参考 csdn 博客 (http://blog.csdn.net/fuchaosz...

git reflog 查看提交版本号

git reset --hard Obfafd 回退本地版本库

紧接着强制推送到远程分支:git push -f

注意:本地分支回滚后,版本将落后远程分支,必须使用强制推送覆盖远程分支,否则无法推送到远程分支

添加忽略文件

情况一:要忽略的文件还没有被git追踪(可能是刚刚新建的文件)
解决方法:这种情况很简单,只要在 .gitignore 添加一行忽略规则即可

情况二:要忽略的文件已经被git追踪过了(临时想起来想忽略的文件)

问题地址 https://segmentfault.com/q/10...

html-test/.env 为目录加文件名

`git update-index --assume-unchanged html-test/.env` 
git 打标签
git 命令行如何打 tag(标签)?  http://www.jianshu.com/p/dab7...

tag 要提交生产环境的版本号,打上 tag 就意味着,该版本要部署到生产环境

新建tag

git tag -a v1.0 -m “Release version 1.0″ // 创建本地tag

git push origin --tags (or git push origin v1.0)

本地tag push 到远程 --tags 将所有的tag提交到服务端 或者 直接加tag名称,是将该tag提交到服务端

git tag -l -n // 列出所有 tag 及注释, git tag 只能列出tag列表,不会显示注释

删除 tag

删除本地tag git tag -d tag名称

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

利用linux命令 grep 进行标签模糊查询

git tag|grep dev_20180124 模糊查询所有含有dev_20180124tag名称

git fetch 与 git pull
git fetch 与 git pull 都是从远程拉去最新的代码到本地
Git fetch :git fetch 取回所有分支的更新。如果只想取得固定分支的更新,可以指定分支名
git fetch 取回的远程分支的更新不会和本地分支自动合并
git pull 取回远程主机某个分支的更新,再与本地指定的分支合并。
git pull origin master === git fetch origin master   +  git merge 

=========================================================================
 上面说的太泛泛了,没有针对性
 
 git fetch 取回的更新,再本地主机上要用 “远程主机名/分支名” 的形式读取。
 比如 origin 主机上的 master分支,就要用 origin/master 读取
 要查看 fetch 下来的内容,可用如下操作
 git checkout origin/master (即切换到以当前提交的版本号为名的分支上)
 如下所示:
 easy git:(e0078ea) git branch -a
 
 查看完之后,切回master分支,然后 merge
 git checkout master
 git merge
 即把fetch下来的内容合并到本地master分支上了
git rebease or git merge
   git pull --rebase,这里表示把你的本地当前分支里的每个提交(commit)取消掉,
   并且把它们临时 保存为补丁(patch)(这些补丁放到".git/rebase"目录中),
   然后把本地当前分支更新 为最新的"origin"分支,最后把保存的这些补丁应用到本地当前分支上。
merge 与 rebase

merge:是将分叉几方与他们最近的共同祖先进行合并,然后生成一个新的提交

rebase:将 目标分支合并到本分支上, 不会产生新的提交,主干分支看起来就好像一条线提交

rebase学习链接

git rebase master  // 在开发分支上 rebase master
git checkout master
git merge dev_xxx  // 现在回到 master 分支,进行一次快进合并。
linux 文件操作 (vi 操作)

新建一个文件夹 mkdir test (新建一个test文件夹 mkdir === make directory)

删除文件或文件夹 rm -rf 名称 (r 参数是删除目录 f 强制 忽略不存在的文件)
rm -rf 目录名称 会将该目录下的素有文件删除,并且不进行询问

新建文件 vi test1.txt vi 文件名称 然后进入 vi 编辑模式 键入 i

读取文件 cat test1.txt cat 文件名

pwd 查看当前目录(路径地址)

删除文件 rm test.txt 删除文件名 rm -i test2.txt 删除前会询问是否删除

git commit --amend 对commit的打补丁、git rebase 的使用

--amend 、 rebase

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/9943.html

相关文章

  • iOS转前端的学习记录

    摘要:我的第一个项目是一个基于和的后台管理系统,当时我还没有任何的前端开发知识,时间也比较紧,就在学习和的基础后,有针对性的对和进行了了解。 第一篇博文,写在从零开始学前端的两个月后,期间经过了春节,之后又经历了一些动荡。算是在边做边学中坚持下来,现在基本上可以完成一些业务逻辑上的开发工作。想到应该总结一下这两个月的学习,也是对自己的知识掌握情况做一个梳理。 我的第一个项目是一个基于vue和...

    Pines_Cheng 评论0 收藏0
  • 初学者福音!可能是最适合你的Java学习路线和方法推荐。

    摘要:学习完多线程之后可以通过下面这些问题检测自己是否掌握,下面这些问题的答案以及常见多线程知识点的总结在这里。可选数据结构与算法如果你想进入大厂的话,我推荐你在学习完基础或者多线程之后,就开始每天抽出一点时间来学习算法和数据结构。 我自己总结的Java学习的系统知识点以及面试问题,已经开源,目前已经 35k+ Star。会一直完善下去,欢迎建议和指导,同时也欢迎Star: https://...

    yanest 评论0 收藏0
  • Conflux伍鸣:用DAG结构提升中本聪共识的吞吐率

    摘要:月日圣诞夜,伍鸣博士做客火星财经创始学习群,分享了使用结构提升中本聪共识的吞吐率。为什么传统的基于的中本聪共识机制的吞吐率非常低下总结来说,为了安全,不得不如此。这样,就绕开了中本聪共识中安全与效率两难的困境。 12月25日圣诞夜,Conflux CTO伍鸣博士做客「火星财经创始学习群」,分享了Conflux: 使用 DAG 结构提升中本聪共识的吞吐率。 嘉宾简介: showImg(h...

    shengguo 评论0 收藏0
  • Conflux伍鸣:用DAG结构提升中本聪共识的吞吐率

    摘要:月日圣诞夜,伍鸣博士做客火星财经创始学习群,分享了使用结构提升中本聪共识的吞吐率。为什么传统的基于的中本聪共识机制的吞吐率非常低下总结来说,为了安全,不得不如此。这样,就绕开了中本聪共识中安全与效率两难的困境。 12月25日圣诞夜,Conflux CTO伍鸣博士做客「火星财经创始学习群」,分享了Conflux: 使用 DAG 结构提升中本聪共识的吞吐率。 嘉宾简介: showImg(h...

    Anshiii 评论0 收藏0
  • Conflux伍鸣:用DAG结构提升中本聪共识的吞吐率

    摘要:月日圣诞夜,伍鸣博士做客火星财经创始学习群,分享了使用结构提升中本聪共识的吞吐率。为什么传统的基于的中本聪共识机制的吞吐率非常低下总结来说,为了安全,不得不如此。这样,就绕开了中本聪共识中安全与效率两难的困境。 12月25日圣诞夜,Conflux CTO伍鸣博士做客「火星财经创始学习群」,分享了Conflux: 使用 DAG 结构提升中本聪共识的吞吐率。 嘉宾简介: showImg(h...

    Meils 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<