Git everyday n git栈
git 本身就是一个技术栈
看了git pro, 觉得自己就不错了, 但是, 工作中总有各种问题, 而且, 这些问题还很基础, 终于认识到git pro 远远不够.
linus原话: github的问题在于, 它鼓励了不合理的操作, 因此, 我们没办法在github上面维护linux内核.
简单的说, git pro对于git的理解其实是有偏差的.
git 如何做代码审核
git基础操作
git help everyday 描述了git常用命令, 这里面依旧藏龙卧虎.
-
如果一个没有commit的修改, 你又不能commit时, 那么有两个选择, 藏起来/抛弃
git reset —hard #抛弃未commit修改, 这个是必须的 git clean -dfx #清除那些没有被版本控制的文件. 这个是配套的, 如果git status没有显示未控制文件, 那么可以不弄这句. git stash #把本地未提交的东西保存一下. 免得checkout不同分支时会被混掉, 我就发生了这事. 血的教训啊. #stash 是一个栈, 可以pop出来, 也可以直接抛弃掉. # 类似下面的三句话, 可以简化 git stash git checkout some_branch git stash pop git checkout --merge some_branch #这是简化版.
-
很神奇的, git add . 会经常失效, 这样git add之后, commit 就不起作用了.
- 当有删除文件的时候, git add .就不起作用了.
- 需要git add -A
- git add . 管理新的和变化的, 不管理删除rm的.
- git add -u 管理变化的和删除rm的, 不管理新的.
- git add -A管理上面两类.
- 注意随着git版本不同, git add . 的表现也不同, 以上表现是git 2.9的表现.
git
git add . #不起作用. git commit -am #起作用. #参考 慕课网的git: [http://www.imooc.com/article/1426]
-
git冲突
- ==== 号上方是当前最新一次提交,下方是冲突的代码。
- 从入门到放弃: [http://www.w3ctrain.com/2016/06/26/learn-git-in-30-minutes/]
- git diff 作用: [http://ithelp.ithome.com.tw/articles/10135441]
-
git对比 这个要再看看.
- add之前 show就可以
- add之后 git diff
- commit之后 git show HEAD
-
git指定远程源为默认源
#改变git的default remote. gp -u <remote_name> <local_branch_name> git push #就是gp
-
git真对远程的rebase操作
gf xxx #git fetch 远程源xxx git fetch #这个就是gf grb xxx/master #rebase xxx源的master git rebase #这个就是grb
-
查看某个文件所有的版本.
git log -p filename #这个命令真的看到了代码变化. git log filename #这个只是历史. 没有代码变化. git log --pretty=oneline 文件名 # [http://www.binkery.com/archives/203.html] git log --follow -p file git log -- file-name git blame filename # http://progit.org/book/zh/ch2-3.html #详细展示一行中的修改 git diff --word-diff #删除的内容如何找出来: git log -S <string> path/to/file #例如: git log -S setPicture_id app/src/main/java/com/takungae/dagong30/dgruning.java #这个blame方法不行, 据说可以试试bisect git blame --reverse START..END app/src/main/java/com/takungae/dagong30/dgruning.java #这一句最正确: 要加-c 或者 -cc git log -c -S 'setPicture_id' app/src/main/java/com/takungae/dagong30/dgruning.java #################################### # 这个最正确 #################################### git log -c -S '你要搜索的字符串比如删除的那一串' 你要搜索的文件路径/你要搜索的文件名.java
-
比较两个文件/文本. 文本比对, 文件比较.
diff xxx ooo#这个其实最爽了, 如果有文件的话. beyond compare #只有文本也可以, 这个是我最喜欢的地方.
这件事还有很多工具可以做.
- diffmerge
- beyond compare
- Araxis Merge
- Kaleidoscope
- idea工具可以用.
- xcode工具也可以.
- meld
-
查看所有被git忽略的文件.
- 一句话解决问题: git ls-files –others -i –exclude-standard
- 又是ruby中国: [https://ruby-china.org/topics/17951]
- 一句话解决问题: git ls-files –others -i –exclude-standard
-
猴子学git: [http://backlogtool.com/git-guide/cn/intro/intro1_3.html]
这个依旧是gitpro思路在教, 不需要看了.
git栈
- linus说: [http://www.ido321.com/1669.html] 其中对github的评价值得深挖. 提交, 合并, 注释, 这些需要学习.
- github说: [https://buzzorange.com/techorange/2016/08/11/github-intro/] 选择尽量少的技术栈.
- codeing直播: [https://buzzorange.com/techorange/2016/08/11/why-we-should-go-livecoding/] 有空要做.
- code review: [https://buzzorange.com/techorange/2016/08/16/airbnb-code-review/] 这个要做起来.
- linux 内核: [http://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git]
- [https://www.kernel.org]
- 如何获取, 有空要看: [http://www.cnblogs.com/elect-fans/archive/2011/12/06/2408696.html]
- 追踪技巧: [http://larmbr.com/2013/10/27/Git-for-linux-tips-for-tracking-code-history/]
- git获取: [http://www.programgo.com/article/67463307945/]
- 以上三分文档应该能解决我下面的git问题.