Toggle navigation
痞子棠
主页
About Me
归档
标签
痞子棠
一个不会钓鱼的程序员不是一个好设计师
git 随手记
无
2016-06-15 17:21:40
139
0
0
wangying6412
#git 随手记 *这只是一篇随意的笔记及摘要,如果想学习GIT,请前往[廖雪峰的GIT教程](http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000)* ##git 基础命令 ```bash git init //初始化目录 git add //添加文件 git commit -m "修改了文件" //提交快照 git status //修改过什么 文件 git diff xxx/xx/xx.js //修改了什么内容 git log //版本提交日志 git reflog //git命令日志,可以查到版本号 git reset --hard HEAD^ //回退到上个版本 git reset --hard HEAD~100 git checkout --file //放弃修改 //命令中的--很重要,没有--,就变成了“切换到另一个分支”的命令 ``` ``` //强制更新 git fetch --all //下载最新版本 git reset --hard origin/master //把HEAD指向刚刚下载的最新的版本 ``` --- ##远程库操作 1. 首先需要添加ssh key `ssh-keygen -t rsa -C "youremail@example.com"` 2. 登陆GitHub,打开“Account settings”,“SSH Keys”页面 3. 点“Add SSH Key”,填上任意Title,在Key文本框里粘贴`id_rsa.pub`文件的内容,例如:`C:\Users\admin\.ssh` 4. 点“Add Key”,你就应该看到已经添加的Key ``` shell git clone https://github.com/wangying6412/gitskills git push origin master //提交到远程 git remote -v //查看远程库 ``` ###添加多个远程库 ```bash //添加一个远程库,例如 company git remote add company https://github.com/xxx/xxxx.git //或者也可以在某个远程库内再加一个远程库,这样就可以一次提交两个或多个库 git remote set-url --add company https://other.git git push company master --all ``` ###随手记 如果是新添加的远程仓库,第一次pull,会有提示不能pull,添加下列后缀 ``` git pull origin master --allow-unrelated-histories ``` --- ##分支操作 git checkout -b dev //创建并切换到dev分支相当于下面两个命令的结合 git branch dev //创建dev分支 git checkout dev //切换到dev分支 git branch //列出当前所有分支 git merge dev //合并分支 git branch -d dev //删除分支 git branch -D dev //强制删除 git log --graph --pretty=oneline --abbrev-commit //当Git无法自动合并分支时,就必须首先解决冲突。解决冲突后,再提交,合并完成。用git log --graph命令可以看到分支合并图。 --- ##BUG分支 假设我们手头正在开发一个功能,但是有一个紧急的BUG需要修改,那么,我们就要先搁置手头的工作,然后修改创建BUG分支并提交。最后重新开始手头的工作。具体命令如下: ```shell git stash //搁置手头的工作(隐藏) git checkout master //切换到master分支 git checkout -b bug-001 //创建BUG分支 /** 然后修改BUG **/ git add . git commit -m "fix xxx bug" git checkout master git merge bug-001 /** 然后回来继续工作 **/ git stash list //查看当前已隐藏的工作现场 git stash apply //恢复工作现场 ``` 多种恢复方式 ```shell git stash apply //恢复到工作现场,不删除已保存的现场 git stash pop //弹出,恢复并删除工作现场 git stash apply stash@{1} //恢复指定的工作现场 ``` --- ##标签管理 发布一个版本时,我们通常先在版本库中打一个标签,这样,就唯一确定了打标签时刻的版本。将来无论什么时候,取某个标签的版本,就是把那个打标签的时刻的历史版本取出来。所以,标签也是版本库的一个快照。 ```shell git tag v1.0 //打一个标签 git tag //查看所有的标签 ``` 给历史提交打上标签,用于忘记打村签,后来补上的场景 ```shell git log --pretty=oneline --abbrev-commit //查看commit记录,并找到commit ID git tag v0.9 6224937 //对某个commit打上标签 ``` ```shell //还可以创建带有说明的标签,用-a指定标签名,-m指定说明文字: git tag -a v0.1 -m "version 0.1 released" 3628164 ``` ```shell git show v1.0 //显示某个标签的详细信息 git tag -d v1.0 //删除某个标签 git push origin v1.0 //推送标签到远程 git push origin --tags //推送所有标签到远程 //如果标签已经推送到远程,要删除远程标签就麻烦一点,先从本地删除: git tag -d v0.9 //然后,从远程删除。删除命令也是push,但是格式如下: git push origin :refs/tags/v0.9 ``` --- ##核弹 ``` //filter-branch大概会是你用来清理整个历史的工具。要从整个历史中删除一个名叫password.txt的文件,你可以在filter-branch上使用--tree-filter选项: git filter-branch -f --tree-filter 'rm -f passwords.txt' HEAD --tree-filter //表示修改文件列表。 --msg-filter //表示修改提交信息,原提交信息从标准输入读入,新提交信息输出到标准输出。 --prune-empty //表示如果修改后的提交为空则扔掉不要。在一次试运行中我发现虽然文件被删除了,但是还剩下个空的提交,就查了下 man 文档,找到了这个选项。 -f //是忽略备份。不加这个选项第二次运行这个命令时会出错,意思是 git 上次做了备份,现在再要运行的话得处理掉上次的备份。 --all //是针对所有的分支。 ``` -------- ##忽略特殊文件 在Git工作区的根目录下创建一个特殊的`.gitignore`文件,然后把要忽略的文件名填进去,Git就会自动忽略这些文件。 ```shell //不需要从头写.gitignore文件,GitHub已经为我们准备了各种配置文件,只需要组合一下就可以使用了。 # Windows: Thumbs.db ehthumbs.db Desktop.ini # Python: *.py[cod] *.so *.egg *.egg-info dist build # My configurations: db.ini deploy_key_rsa ``` >使用Windows的童鞋注意了,如果你在资源管理器里新建一个.gitignore文件,它会非常弱智地提示你必须输入文件名,但是在文本编辑器里“保存”或者“另存为”就可以把文件保存为.gitignore了。 ###强制添加 有些时候,你想添加一个文件到Git,但发现添加不了,原因是这个文件被.gitignore忽略了: ```shell git add App.class The following paths are ignored by one of your .gitignore files: App.class Use -f if you really want to add them. ``` 如果你确实想添加该文件,可以用-f强制添加到Git: ```shell git add -f App.class ``` 或者你发现,可能是.gitignore写得有问题,需要找出来到底哪个规则写错了,可以用git check-ignore命令检查: ```shell git check-ignore -v App.class .gitignore:3:*.class App.class ``` Git会告诉我们,.gitignore的第3行规则忽略了该文件,于是我们就可以知道应该修订哪个规则。 --- #搭建git服务器 ##搭建 第一步,安装git: ``` sudo apt-get install git ``` 第二步,创建一个git用户,用来运行git服务: ``` sudo adduser git ``` 第三步,创建证书登录: ``` //收集所有需要登录的用户的公钥,就是他们自己的id_rsa.pub文件,把所有公钥导入到/home/git/.ssh/authorized_keys文件里,一行一个。 //关于公钥与私钥,见 远程库 章节 //例如: ssh-keygen -t rsa -C "youremail@example.com" ``` >需要使用非root权限创建`~/.ssh/`和`~/.ssh/authorized_keys` **!!! 重要的步骤:使用非root用户,例如刚创建的git用户创建~/.ssh/和~/.ssh/authorized_keys!还要正确设置权限,如700,644.** ``` sudo adduser git su - git mkdir .ssh chmod 700 .ssh touch ~/.ssh/authorized_keys chmod 644 ~/.ssh/authorized_keys vim ~/.ssh/authorized_keys ``` 第四步,初始化Git仓库: ``` //先选定一个目录作为Git仓库,假定是/srv/sample.git,在/srv目录下输入命令 //**注意!!! 这一步也要用git帐户,并且在/home/git目录下建立git仓库文件夹** sudo git init --bare sample.git //然后,把owner改为git: sudo chown -R git:git sample.git ``` 第五步,禁用shell登录: ``` //出于安全考虑,第二步创建的git用户不允许登录shell //注意:使用 which git-shell 命令获得 git-shell 的安装路径,再替换掉 /bin/bash //编辑/etc/passwd文件。找到类似下面的一行: git:x:1001:1001:,,,:/home/git:/bin/bash //改为 git:x:1001:1001:,,,:/home/git:/usr/bin/git-shell //这样,git用户可以正常通过ssh使用git,但无法登录shell,因为我们为git用户指定的git-shell每次一登录就自动退出。 ``` 第六步,克隆远程仓库: ``` 现在,可以通过git clone命令克隆远程仓库了,在各自的电脑上运行: git clone git@server:/home/git/srv/sample.git ``` --- ##管理公钥 如果团队很小,把每个人的公钥收集起来放到服务器的`/home/git/.ssh/authorized_keys`文件里就是可行的。如果团队有几百号人,就没法这么玩了,这时,可以用[Gitosis](https://github.com/res0nat0r/gitosis)来管理公钥。
上一篇:
sass 学习笔记
下一篇: 无
0
赞
139 人读过
新浪微博
微信
更多分享
腾讯微博
QQ空间
人人网
提交评论
立即登录
, 发表评论.
没有帐号?
立即注册
0
条评论
More...
文档导航
没有帐号? 立即注册