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

[经验分享] git 使用积累

[复制链接]
发表于 2018-1-15 14:12:41 | 显示全部楼层 |阅读模式
  Git 是 Linux 之父 Linus Trovalds,为管理 Linux 内核代码而建立的,被认为是分布式版本控制工具中的顶级水准。智能、友好、强健、高效。
  HEAD代表当前的工作树。
  SHA1代表项目文件的对象名。有40位。
  tag为对象标签。
  在git的概念里总共有四种对象:tree、blob、commit、tag。其关系如下图:
DSC0000.jpg

  一个重要的概念是:git与其他版本控制系统不一样的是,其它管理系统如svn采用的事增量文件系统。而git则是将每一次提交的全部内容都保存下来。这虽然占用了系统空间。但是在如今这个时代,容量已不是问题。这样做显然可以提高速度。这也是git快捷高效的一个原因。
  注:一个blob就是一个内容块。它没有文件名。可能多个对象指向同一个blob。
  Git 工作流程
  —————————-
  1、使用中央服务器辅助协作;

  2、每人在服务器拥有一个以自己>  3、各人只许推送更新到自己的分支,不允许推送到别人的分支或者 master;
  4、master 由专人管理,在合适时 merge 其它分支(开发初期每日自动 merge 各人分支,生产化后则由人工 merge 经过 review 的分支);
  5、代码修改 merge 到 master 后,将同步到所有终端。
  Git 常用命令
  ——————————
  1、查看blob对象内容
  $ git show SHA1-BLOB
  2、查看tree对象内容
  $ git ls-tree SHA1-TREE(亦可以用git show)
  3、查看commit对象(配合--pretty=raw可以查看详细的commit的内容
  $ git show -s --pretty=raw SHA1-COMMIT
  或$ git log -s --pretty=raw SHA1-COMMIT
  4、一个标签对象包括一个对象名(译者注:就是SHA1签名), 对象类型, 标签名, 标签创建人的名字("tagger"), 还有一
  条可能包含有签名(signature)的消息. 你可以用git cat-file 命令来查看这些信息:

  • $ git cat-file tag v1.5.0
  • object 437b1b20df4b356c9342dac8d38849f24ef44f27
  • type commit
  • tag v1.5.0
  • tagger Junio C Hamano <junkio@cox.net> 1171411200 +0000
  • GIT 1.5.0
  • -----BEGIN PGP SIGNATURE-----
  • Version: GnuPG v1.4.6 (GNU/Linux)
  • iD8DBQBF0lGqwMbZpPMRm5oRAuRiAJ9ohBLd7s2kqjkKlq1qqC57SbnmzQCdG4ui
  • nLE/L9aUXdWeTFPron96DLA=
  • =2E+0
  • -----END PGP SIGNATURE-----
  5、查看索引:所谓的索引一个在你的工作目录和项目仓库间的暂存区(staging area). 有了它, 你可以把许多内容的修改一起提交(commit). 如果你创建了一个提交(commit), 那么提交的是当前索引(index)里的内容, 而不是工作目录中的内容.
  $ git status
  该命令可以看到哪些文件被暂存了,哪些文件被修改了但没有被暂存。哪些文件没有没有被跟踪。
  6、仓库的建立:

  • git clone 其支持三种协议
  git clone git://url
  git clone http://url
  git clone name@ssh

  • mkdir temp cd temp  git init-db 初始化自己一个仓库。
  • 可以通过git pull来更新仓库。
  • 使用仓库前一定要敲入一下命令  git config --global user.name "your name"
      git config --global user.email "your email"
7、提交:$ git commit -a -m "your blabla"如果有新添加的文件要被跟踪需要敲 git add filepath 或者git add .8、移动和重命名:$ git mv oldfilename newfilename9、删除文件:$ git rm file10、字符串查找:$ git grep "your word" (其相比于grep 可以实现跨分支查找)11、比较不同的commit:git diff commit1 commit2  如果只有一个commit则缺省与当前HEAD进行比较。
也可以比较不同commit的同一文件git diff tag1:file tag2:file 比较一个文件在两个tag之间的不同。  12、查看日志:
  git log 选项:-p 显示具体内容 --name-only 只显示更改的文件名称
  13、显示文件:
  git ls-files 选项: -m 显示修改过的
  14、推送的服务器:
  将自上次 push 以来的,本地历次 commit,推送到服务器。结合我们的实际,应该这样写:
  $ git push origin master:your-id

  其中,master 是本地的分支名;your-id 填你在服务器上的>  15、创建显示分支:
  $ git branch mybranch [commit-SHA1,分支状态(git show-branch 的标识),远程分支]
  $ git checkout mybranch
  如此便可以得到某次commit的内容分支或者跟随某一个远程分支。
  单独的git branch可以用来查看分支
  git branch -a可以将远程分支也显示出来。
  git branch -d branch用以删除已经合并的分支
  git branch -D branch强制删除分支
  16、显示提交状态:
  $ git show-branch
  17、迁出文件:
  恢复某个已修改的文件(撤销未提交的修改)
$ git checkout file-name切换到另外的分支,进行开发:$ git checkout branch-name18、撤销提交:$ git revert commit-SHA1(可能会产生冲突)19、删除提交:$ git reset --soft commit-SHA1(只是删除提交信息,除此,其他东西都还在)$ git reset --harf commit-SHA1 全部删除20、修改最近一个次提交:此种情况是为了如果在提交后发现有个文件没有添加跟踪或者要修改注释时可以在分别作了相应处理后敲入git commit -amend21、STASH先将未提交的修改暂存起来,接着清除所有改动,使之与没修改时一样。若你正在开发功能 A,又需立即去开发功能 B。A 的代码正改到一半,未认真整理,你不想立即提交。此时……请呼叫 stash ~。它会使你所有未提交的修改瞬间不见了:$ git stash它会使刚刚不见了的修改,瞬间又回来了:$ git stash pop22、git send-email可以配置gitconfig文件sendemail选项来确定发送的邮件格式。如果不需要经过邮件服务器只是发送的本机的信箱那么就不需要配置smtp选项。而在sendemil.to上加上接受人的系统上的名字即可git send-email可以发送生成的patch文件但是要发给本机的话一般机上commit号或者commitid即可。 23、其他:    git ls-tree HEAD file 显示file在HEAD中的SHA1值。
  git cat-file -t SHA1 显示一个SHA1的类型。
  git cat-file type SHA1 显示一个SHA1的内容。type是blob、tree、commit、tag之一。
  patch:
  git format-patch -1 生成最后一个提交对应的patch文件。
  git am < patch 把一个patch文件加入git仓库中。
  git am --resolved 如果有冲突,在解决冲突后执行。
  git am --skip 放弃当前git am所引入的patch。
  clean:
  git clean -dxf 用于清除未跟踪文件。
  git clean -dnf 可以显示需要删除的文件,但不包括被.gitignore忽略的。
  git reset --hard HEAD 用于清除跟踪文件的修改。

运维网声明 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-435342-1-1.html 上篇帖子: git 提交解决冲突 下篇帖子: [git]用pelican搞一个自己的blog(已完成)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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