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

[经验分享] 12个git实战建议和技巧

[复制链接]

尚未签到

发表于 2018-9-18 11:20:25 | 显示全部楼层 |阅读模式
转载自:http://www.lupaworld.com/article-221425-1.html  1.使用“git diff”来折叠多行
  用git diff经常会出现很多内容,导致很多内容被遮住了,让人很是苦恼,幸运的是这里有个解决方案。
  如果你使用less作为默认的pager,只需要输入-s,就可以保证不会被diff刷屏了。
  或者,你也可以使用git config设置pager来达到同样的效果:
  为当前项目设置pager:
  $ git config core.pager 'less -r'
  再将pager设置的作用域设置为整个项目:
  $ git config --global core.pager 'less -r'
  2.设置全局代理
  在某些网络环境下,你可能需要为git配置代理,这很简单,只需要一行命令就可以了:
  git config --global https.proxy https://user:password@address:port
  3.clone某个特定分支
  在某些大型项目中,或者只是图方便,有时候你可能只希望clone某个分支,你可以这样做:
  mkdir $BRANCH
  cd $BRANCH
  git init
  git remote add -t $BRANCH -f origin $REMOTE_REPO
  git checkout $BRANCH
  4.比较某个文件和远程分支上的区别
  很简单:
  git diff localbranch remotebranch filepath
  5.列出版本库中所有已删除的文件
  也许你是想将其恢复,因此需要仔细确认某些merge操作,无论如何,列出版本库中所有已删除的文件会非常有帮助。你只需要这样做:
  git log --diff-filter=D --summary
  如果你想将其恢复,参照这里。
  如果你不想知道是哪次commit中删除的,只需要添加一个grep delete。
  git log --diff-filter=D --summary | grep delete
  6.在版本库所有版本中搜寻一条字符串
  往往你想要查找某段代码、某个函数、一个常量、一个文件,但是却找不到了。它被删除了,什么时候删除的?这个小技巧能搜索整个版本库中git diff信息,可能会花些时间,但是非常有用:
  git rev-list --all | (
  while read revision; do
  git grep -F 'Your search string' $revision
  done
  )
  7.应用另外一个(不相关的)本地版本库中的patch
  从另一个版本库中cherry-pick一条提交记录,首先需要将那个版本库作为一个远程版本库添加进来,并fetch其变化,然后cherry-pick其提交记录。
  如果你追求速度,也可以使用这个未经优化的命令:
  git --git-dir=../some_other_repo/.git format-patch -k -1 --stdout | git am -3 -k
  8.从新的主干中分出一个新分支
  有时候你会在better_brach上工作一段时间,并准备将其设为新的master,你会怎么做?
  这里是Stack Overflow上提供的常规解决方案:
  1.切换到better_brach分支:
  git checkout better_branch
  2.保留better_branch分支全部内容,但是记录合并:
  git merge --strategy=ours master
  3.切回mater
  git checkout master
  4.快速合并
  git merge better_branch
  5.如果你想让合并步骤变得更清晰,可以添加commit信息。只需要修改下第二步:
  git merge --strategy=ours --no-commit master
  git commit # Here add your custom message to the commit template
  9.向分支提交一个初始的空commit,保证完全复位
  这样会重写历史记录,所以只能在未和任何人分享前做,否则将可能把同事者的文件破坏。
  1.创建一个新的空分支,例如:newroot
  git checkout --orphan newroot
  git rm --cached -r .
  git clean -f -d
  2.创建空的commit
  git commit --allow-empty -m '[empty] initial commit'
  3.重新发送分支的全部内容
  git rebase --onto newroot --root master
  4.删除临时分支newroot
  git branch -d newroot
  现在master就已经包含了一个空的root commit了。
  10.清空一个分支来做些不同的事
  有时候你会想要从某个分支重新开始,或者打算保留一些逻辑上和主干相关但是跟踪另一个跨职能方面的代码,就像GitHub项目的gh-pages。
  但如果你只想重新开始某个分支,清空所有历史记录呢?
  1.检出(checkout)一个分支:
  git checkout -b branch_to_zero
  2.跟上条一样,先建立增加一个初始的空commit,之后就可以通过重新设置来清空一个分支。
  3.使用hard重置分支到刚刚创建的初始commit:
  git reset --hard initial_commit
  11.如何修改一个特定的commit?
  当你想在推送前重做你最后的commit时,可以使用修改命令(git commit --amend)。如果你想修改的不是最后一个commit呢?
  这种情况下,你可以使用git rebase,例如,你想要修改bbc643cd commit,运行下面的命令:
  $git rebase bbc643cd^ --interactive
  在默认的编辑器中选择并修改你期望修改的,然后保存修改并输入:
  $ git add
  现在你就可以使用
  $git commit --amend
  来修改commit,之后使用
  $ git rebase --continue
  返回之前最新的commit。
  12.如何隐藏多个已修改文件中一个?
  git stash --keep-index命令可以用来隐藏上次commit中没有add的东西,之后add想要提交的文件并运行相应命令就可以了。
  按照下面的提示,你可以把一条老的commit提交到多个变更集中:
  互动地rebase最后一条好的commit:
  git rebase -i last_good_commit
  将某些变化标记为edit:
  git reset HEAD^
  git add file1 file2 file3
  添加相应的文件:
  git add file1 file2 file3
  因此之前没有添加的文件:
  git stash --keep-index
  别忘了收尾:
  git commit
  git stash pop
  有必要的话,重复第二步之后的步骤:
  git rebase --continue


运维网声明 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-589775-1-1.html 上篇帖子: 10篇写给Git初学者的最佳教程 下篇帖子: git rm
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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