安装:
sudo apt install gitk
运行:
gitk
:展示当前分支
gitk --all
:展示所有分支。
gitk v1.0
:展示特定分支。
安装:
sudo apt install git-gui
运行:
git gui
以上两个工具采用tk/tcl编写,都是全平台支持的。
这两个工具的作者虽然不同,但是都在自己软件中,留下了打开对方软件的快捷方式,真可谓狼狈为奸?
https://zhuanlan.zhihu.com/p/601987272
有了这款开源神器,Git容易多了!(git-sim)
git init
基本状态标识
各状态之间变化
git add <FILE>
git restore <FILE>
git rm --cached <FILE>
git rm -f <FILE>
git rm --cached <FILE>
git checkout -- <FILE>
git add <FILE>
git reset HEAD <FILE>
git commit
git reset --soft HEAD^
git commit --amend
git commit --amend --no-edit
git commit --amend --reset-author
这里直接用当前author信息替换之,所以需要在修改前,设置好author信息如果git pull
的时候,本地有修改,就需要暂存,并在git pull
之后,恢复之。
git stash
git stash pop
回退历史版本:
git checkout
回退之后,如果不满意,就需要前进操作,以恢复后续的更新。然而这个时候有个麻烦的地方,在git log
中已经找不到后续的更新记录,也就查不到commit id。这时可以用git reflog
查看git操作记录,以获得想要的commit id,并checkout之。
查看远程仓库的地址:
有的时候时间一长,就会搞忘当初下载代码时的远程仓库的地址。这时可以使用git remote -v
查看之。
查看远程分支:
git branch -r
checkout远程分支:
git checkout -b dev origin/dev
push远程分支:
git push <远程主机名> <本地分支名>:<远程分支名>
删除远程分支:
git push origin --delete dev_2
同步已经删除的远程分支:
git remote prune origin
git clone --recursive URL
https://segmentfault.com/a/1190000006185954
git的reset和checkout的区别
制作patch主要有两种方式:git diff
和git format-patch
。前者生成通用patch,而后者生成git专用patch。使用示例:
git diff SHA1 SHA2
比较两个历史版本之间的差异,SHA1和SHA2是两次commit的SHA值。
git format-patch HEAD^
git format-patch -1
应用patch:git am
和git apply
。
git apply
并不会将commit message等打上去,打完patch后需要重新git add
和git commit
,而git am
会直接将patch的所有信息打上去。
打标签:
git tag -a v0.1.2 -m "v0.1.2"
列出标签:
git tag
检出标签:
git checkout v0.1.2
当发生冲突,需要放弃修改,强制更新的时候,可以:
本地版本:
git reset --hard
远程版本:
git reset --hard origin/<branch name>
编辑仓库目录中本地的”.git/config”文件,增加如下属性:
[credential]
helper = store
git clone https://<USERNAME>:<PASSWORD>@github.com/path/to/repo1.git
用于将分支A上的修改C,移植到分支B上。
git cherry-pick <commit id>
git reset --soft <SHA>
git push origin master --force
git blame
查看一行代码是谁改的。
HEAD
表示当前版本,HEAD^^
表示当前版本之前的两个版本,如果回溯的版本较多也可以写作HEAD~100
。
git merge -s ours branch
,在不改变本地内容的情况下,触发merge操作。
git log --graph
,字符式的图形化展示分支历史。
查看远程仓库地址:
git remote -v
修改远程仓库地址:
git remote set-url origin URL
Github进行fork后如何与原仓库同步:
git remote add upstream URL
git fetch upstream
git merge upstream/master
git push
解决server certificate verification failed问题:
git config --global http.sslverify false
有的文件或文件夹,你不想将它加入版本控制中,但恼人的是,每次commit的时候,这些文件都会出现在候选列表中,稍有不慎,甚至会错误选中。
这时,你可以编辑.gitignore来忽略这些文件,相当于是加了一个黑名单。但其实.gitignore也可定义白名单:
*/
!src/
!src/**
参考:
http://ybin.cc/git/gitignore-syntax/
彻底理解.gitignore
https://github.com/github/gitignore
包含各种常见开发环境的.gitignore示例
#提交时转换为LF,检出时转换为CRLF
git config --global core.autocrlf true
#提交时转换为LF,检出时不转换
git config --global core.autocrlf input
#提交检出均不转换
git config --global core.autocrlf false
#拒绝提交包含混合换行符的文件
git config --global core.safecrlf true
#允许提交包含混合换行符的文件
git config --global core.safecrlf false
#提交包含混合换行符的文件时给出警告
git config --global core.safecrlf warn
参考:
http://www.cnblogs.com/sdgf/p/6237847.html
git换行符LF与CRLF转换问题
git config user.name XXX
git config user.email XXX@YYY
全局配置放在~/.gitconfig
,单个仓库的配置放在.git/config
。
使用Git拉去github上的一些开源项目,无比方便,但是有些项目比较庞大,而我们只想拉取其中指定的一部分文件夹或者文件,那就需要我们另外动些手脚了。
1.使用SVN。
需要修改URL:
https://github.com/Sarasra/models/tree/master/research/capsules
将/tree/master/
换成/trunk/
即可。
2.使用Sparse checkout。
git init
git remote add -f origin <url>
git config core.sparsecheckout true
echo “libs” >> .git/info/sparse-checkout
参考:
https://blog.csdn.net/deeplies/article/details/52754980
如何在github上下载单个文件夹?
https://www.zhihu.com/question/25369412
如何从GitHub上下载单个文件夹?
git项目下有个git-completion.bash
文件,提供了tab自动补全的功能。
https://www.cnblogs.com/wang_yb/p/5969451.html
命令行自动补全原理
git对于大的二进制文件不太友好,对于文件/历史的部分导出也支持的不太好。所以对于大公司的项目来说,并不太好用。
目前的公司使用Perforce作为版本控制工具,和git相比这种老工具的功能实在是弱爆了。但是P4对于大文件支持的很好,所以还是不得不用。
参考:
http://www.ruanyifeng.com/blog/2016/07/google-monolithic-source-repository.html
谷歌的代码管理
https://www.zhihu.com/answer/175222330
代码版本控制用SVN还是Git好?
OpenGrok是一个阅读源码的Web系统。
官网:
http://oracle.github.io/opengrok/
代码:
https://github.com/oracle/opengrok
参考:
http://mazhuang.org/2016/12/14/rtfsc-with-opengrok/
搭建大型源码阅读环境——使用OpenGrok
Git LFS(Large File Storage)是Github开发的一个Git的扩展,用于实现Git对大文件的支持。
Git LFS可以把音乐、图片、视频等指定的任意文件存在Git仓库之外,而在Git仓库中用一个占用空间1KB不到的文本指针来代替文件的存在。
通过把大文件存储在Git仓库之外,可以减小Git仓库本身的体积,使克隆Git仓库的速度加快,也使得Git不会因为仓库中充满大文件而损失性能。
官网:
https://git-lfs.github.com
中文简介:
https://gitee.com/help/articles/4235
安装:
curl -s https://packagecloud.io/install/repositories/github/git-lfs/script.deb.sh | sudo bash
sudo apt install git-lfs
git lfs install
没有带宽问题的话,可以直接git lfs fetch --all
。但是考虑到国内的访问速度,最好还是指定单个文件,逐个下载比较好。
白名单:
git config lfs.fetchinclude '<file path>'
黑名单:
git config lfs.fetchexclude '<file path>'
然后:
git lfs fetch --recent
gitee由于将LFS当作收费功能,竟然丧心病狂的将黑名单设为
*
,导致fetch不到任何东西。。。
最后:
git lfs checkout
使用中遇到问题,可以查询设置:
git lfs env
列出repo里所有lfs文件:
git lfs ls-files
参考:
https://mp.weixin.qq.com/s/yoSeUTy13LoKyS1UFKaUbA
如何存储Git大文件?
https://mp.weixin.qq.com/s/z_zFveiiLu9vLvWuBcsaIg
Git从入门到进阶
https://mp.weixin.qq.com/s/0Cv968LpSSYKJpAbW1MlMA
手把手教你git全操作
https://mp.weixin.qq.com/s/DbvRbaH7BJKeTCT4LVXUoA
Git的4个阶段的撤销更改
https://mp.weixin.qq.com/s/nUqvSnnPjYqk2O8u0tQEtQ
Git内部原理揭秘
https://mp.weixin.qq.com/s/nmi1HYkKD8QX0phbvOko2Q
Git居然还有这么高级用法,你一定需要
https://mp.weixin.qq.com/s/PUUL913fig6cFfqy4OKcGA
工作流一目了然,看小姐姐用动图展示10大Git命令
https://blog.csdn.net/mocoe/article/details/84344411
修改git commit的author信息
https://mp.weixin.qq.com/s/9Ey04P5Xv4W95N2FEioZ1g
如何选择Git分支模式?
https://mp.weixin.qq.com/s/GZkGfwrfMTzrMfki8LKbIw
腾讯广告3000+万行大代码库主干开发实战
https://mp.weixin.qq.com/s/KEu6qCl-En6HiKGo2pgEQg
TensorBay:一款易用的像Git一样数据版本管理工具!
您的打赏,是对我的鼓励