设为首页 收藏本站
查看: 839|回复: 0

[经验分享] Git学习心得

[复制链接]

尚未签到

发表于 2018-9-17 11:37:00 | 显示全部楼层 |阅读模式
Git 学习心得
参照廖雪峰老师的Git教程

Git命令

git init
  用于在一个文件夹中创建git的一些仓库文件信息,可以用ls -a查看该文件
git add “filename”
  用于将文件添加到本地的仓库,可以看做是把文件添加到一个暂存区中
git commit -m “comment”
  用于将暂存区中的文件添加到仓库中, -m后面的comment是对本次提交的说明
git status
  查看工作区(文件夹)中是否有文本文件发生过改动,也就是把工作区和版本库的内容对比
git diff
  如果git status命令报告有文件修改过,那么可以用git diff查看具体的修改内容
git diff显示内容的意义:
  减号’-‘表示上一次提交到仓库中的文本内容,加号’+’表示本次修改后的文本内容。
  @@ -1,3 +1,5 @@     表示上一次提交的文本有3行,本次修改后有5行
  若显示的内容前面没有’+’和’-‘,说明这是两个文本共有的
  显示的内容前面有’+’说明是本次修改后的文本独有的
  显示的内容前面有’-‘说明是上一次提交的文本独有的。
git log
  使用git log可以查看commit的记录,加上参数 –pretty=oneline可以只显示版本号和注释
git reset
  版本之间进行回退与恢复,完整命令为:git reset –hard HEAD
  其中HEAD是表示回退到当前版本的上一版本。因为HEAD相当于一个指针,指向当前分支,^表示向前一个版本,若要回到当前版本的前n个版本,可以把HEAD改为HEAD~n
以上的命令为向前回退,若要向后恢复,那么可以通过版本号的查找恢复:
  使用git log可以查看到版本号,然后可以通过把–hard后面的参数改成版本号,即可恢复到后面的版本,如果通过git log无法查看到想要恢复到的版本号,那么可以使用git reflog查看之前打过的git命令,从而找到版本号
工作区 和 版本库 的关系

  通过git init创建了版本库,然后每次要把工作区(文件夹)中的文本提交到版本库中都是先用git add命令提交到stage(暂存区),然后用git commit命令提交到master分支中,前面说的版本之间的回退与恢复也是在master中利用了版本号,而HEAD指针指向master最后一个版本号(当前版本)
  在commit之后使用git status,显示工作区clean,表示暂存区的内容与最近一次提交同步,但是暂存区还是有内容的。
  如果在修改之后没有add到暂存区,那么commit是不会把最新的修改提交到版本库当中的。因为commit只是把add到stage中的修改提交到版本库。
git diff –cached
  用于查看暂存区(stage)与上一次最近一次commit的内容有无不同。
git diff HEAD –filename
  用于对比版本库master分支中的最近一次修改的文件与本地文件的不同
撤销修改的方法
git checkout – filename
  用于把工作区(文件夹)的修改撤销,用版本库中的版本替换掉工作区的版本,前提是没有用add添加到暂存区
git reset HEAD filename
  用于把暂存区的修改撤销,但是并没有撤销工作区的修改,这时可以通过git checkout命令撤销工作区的修改
git reset –hard HEAD^
  如果没有提交到远程版本库,可以用版本回退撤销修改,否则就不能撤销了。
git rm filename
  用于把版本库中的内容删除掉,此时工作区中的内容也被删掉了,如果误将工作区的内容删掉,但是版本库中还未删除,则可以用git checkout –filename用版本库中的内容恢复到工作区中
远程仓库
1st step:创建SSH KEY
ssh-keygen -t rsa -C “email”用于生成一对公钥私钥
  然后在github网站中添加ssh key,就可以在以后提交到github仓库的时候通过认证,表明身份。
2nd step:在github新建仓库,关联本地仓库
  git remote add origin git@server-name:path/repo-name.git
  注意:origin是远程仓库的名字,可以修改,但是一般默认是origin,后面的repo-name是在github新创建的仓库的名字。在执行本条命令的时候需要在本地仓库中执行,也就是在已经进行过git init的文件夹中执行。
  git push -u origin master
3rd step:推送修改到github仓库
  在关联后第一次推送是推送master分支的内容到远程仓库的master分支,并与之关联,所以第一次推送需要用到-u 参数
  git push -u origin master
  再以后的推送中,不需要使用-u参数
  git push origin master  这是把本地master分支推送到远程仓库中
4nd step:克隆到本地仓库
  git clone ssh-address
  其中ssh是指那个远程仓库的ssh协议地址,使用ssh协议速度快,但是可能在公司内部无法使用,需要使用https协议地址,但是本质都是一样的。通过git clone命令可以把远程仓库的内容全部克隆到当前文件夹中并新建一个文件夹命名为远程仓库的名字
分支管理
  每一个分支都相当于一条时间线,有自己的指针,指向最后提交的版本号,HEAD指向的是当前分支的指针
创建并切换分支
  默认是只有一个master分支,可以随意进行切换
  创建分支:git branch new_branch_name
  切换分支:git checkout new_branch_name
  当然也可以只用一条命令创建并切换分支:git checkout -b new_branch_name
git branch 查看当前分支,分支前面标有*的是当前分支
git merge branch_name 合并分支到当前分支
git branch -d branch_name 删除分支
合并分支
  在合并分支的时候可能出现冲突,需要手动解决冲突之后才能自动合并分支。如果没有冲突,就可以用前面所写的命令git merge branch_name 合并分支到当前分支
  如果有冲突,可能是如下的情况,两条分支都有新的提交:

  这时候不能自动合并分支,这时候可以用git status查看导致冲突的文件是什么,然后手动修改即可,如下面的冲突情况:
  Git is a distributed version control system.
  Git is free software distributed under the GPL.
  Git has a mutable index called stage.
  Git tracks changes of files.
  > feature1
  其中的是冲突的地方,在行末都有标出冲突的分支是什么,用==分割出有冲突的具体内容,可以修改这一整段以解决冲突
  冲突解决后的分支情况如下:

  使用带参数的git log查看分支合并情况:
  git log –graph –pretty=oneline –abbrev-commit
  一般来说,不需要用到的分支要及时删除掉。
一个小问题
  在使用git merge的时候,是用了fast forward模式,这样的话用git log是看不出来进行过分支合并,而有时候需要在log中记录合并的信息,就需要用到普通模式(递归模式)进行合并分支
  git merge –no-ff -m “comment”
  在普通模式下合并分支可以加上注释。合并后可以从历史中看出合并记录:

  通常master只发布稳定版本,在dev分支中进行开发,而每个成员在自己的分支中开发,然后提交到dev分支,最后经过测试才提交到master分支

修复bug
  在修复bug的时候需要单独创建一个分支以处理bug,在这时候可能正在dev分支进行开发,所以需要先保存dev现场,但是不是提交到仓库中。
  git stash 命令可以保存当前分支的内容,就像是函数调用一样,现场保护之后可以在之后恢复。
  在保存完现场之后可以去到需要修复bug的分支进行修复,最后回到dev分支继续开发,但是这时候git status显示工作区是clean的,因为已经把所有内容保存到了stash中。所以,这时候需要用这个命令恢复现场:
  git stash list: 显示当前stash列表里面保存了的工作区内容
  git stash apply 以stash列表的第一个进行恢复
  git stash apply stash@{1} 以stash列表的第二个进行恢复
  需要注意的是,用apply恢复后在stash列表中还是存在之前保存的内容,需要用git stash drop删除
  另一种更为方便的是在恢复的同时删除stash列表中的内容:
  git stash pop
注意
  如果在master分支修复bug之后需要把修复后的master内容同步到dev分支,则先转换到dev分支,再进行merge就可以了
feature分支(为新功能的开发创建的分支)
  如果一个分支在合并之前就确认需要删除,也就是说这个分支的内容不再需要了,那么删除这个分支需要用到的命令为:
  git branch -D branch_name
  注意这里的D是大写,如果是合并过的分支需要删除,用的是小写的d
分支推送与抓取
  推送:
  git remote -v 查看远程仓库版本信息
  首先用git remote查看远程仓库名,默认是origin
  然后可以用git push origin branch_name
  把分支推送到origin远程仓库中去
  抓取:
  git pull
  如果推送失败,一般是先通过git pull 抓取远程仓库中的新版本,然后和本地仓库的相应分支合并,然后再推送到远程仓库中去。使用pull的时候需要先把本地仓库的分支和相应的远程仓库的分支进行关联,命令如下:
  git branch –set-upstream branch-name origin/branch-name
  一次把所有分支的更新抓取到本地仓库,可以用命令:git fetch origin, 如果在后面继续加上分支名,那么就和pull一样的作用
标签
  标签相当于指针,是指向commit的指针,但是和分支管理中的HEAD指针不一样,标签是不可移动的,只能创建和删除
创建标签
  git tag tag_name
  这里是对最近一次commit打标签

  如果要对之前的某此commit打标签,需要增加一个参数(commit>  比如某次commit的id是6eabc123,那么可以用一下方式打标签:
  git tag v1.0 6eabc123
  标签也可以用注释,直接在后面加参数-m ”comment“即可
  git tag v1.0 6eabc123 -m “this is a tag”
  查看标签内容:
  git show tag_name
  比如
  git show v1.0
  git tag 查看所有标签
推送标签
  git push origin推送某个本地标签
  git push origin –tags  推送本地所有标签
  git tag -d删除本地某个标签
  git push origin :refs/tags/删除远程某个标签
  注意:在删除远程标签之前需要先删除本地标签。
参与github开源项目
fork
  fork他人的项目到自己的远程仓库中,然后clone到本地仓库进行开发,如果想要对方接受自己的代码,可以用pull request进行推送,如果对方接受,就成功推送。
pull request
  想要对方接受自己的代码,首先就需要保证自己的代码能够被对方自动merge,也就是不能跟对方的主分支有冲突。


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-588374-1-1.html 上篇帖子: git 的使用 下篇帖子: Pro Git(中文版)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表