git学习笔记

Posted 大唐西域都护

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了git学习笔记相关的知识,希望对你有一定的参考价值。

以前都是直接用Github for windows图形客户端来上传代码,并不了解git的命令,也远没有发挥出git应有的威力。如今在做一个CMS的项目,最后需要将其部署到远端服务器上,而经过前端工程化思想的洗礼之后,我已无法忍受手工传文件到服务器的"FTP部署法",因为这样原始低效易出错,且严重不利于维护更新。本着能自动化就自动化的精神,我开始研究用git来部署网站的方法。
学习资料链接:http://blog.jobbole.com/78960/
git仓库(repo)是指存放项目文件的目录,这个目录下有一个.git隐藏文件(如果没有,用git init生成),里面是用于版本管理的相关文件,别乱动。
.git是版本库,其中最重要的是stage(暂存区),还有git自动创建的分支master,以及指向master的一个指针HEAD。
进入暂存区的文件被暂时“锁定”等待提交,文件在加入暂存区之后发生的变动不影响暂存区,提交以暂存区版本为准。
注意:命令里可以使用通配符*?等。
常用命令
git init 初始化版本库(--bare 生成裸库,即只有记录版本库历史信息的文件,而没有实际项目源文件的拷贝)
git add [file]:将文件添加到暂存区等待提交。文件被添加暂存区后所发生的变动将不被提交,除非重新添加一次。
git commit -m [message]:将暂存区的文件提交到HEAD指向的当前分支上
git diff [file]:查看文件相对于分支上的变动
git status [file]:查看文件状态
git checkout -- [file]:用暂存区文件覆盖工作区文件,相当于丢弃上次add以来的变动。git checkout . 表示用暂存区的所有文件覆盖工作区文件。
git log 查看提交日志
git reflog 查看最新动作日志
git reset --hard [版本号] 恢复指定版本
git reset -hard HEAD^ 恢复到上一个版本(一个^表示一个版本,或者用~[数字]表示回退版本数)
分支策略
一般master分支是最稳健的,用于发布新版本,不能在上面干活,干活都应该在别的分支上,干完再合并到master。
git branch [branch] 创建新分支
git checkout [branch] 切换到指定分支(带上-b参数表示同时创建新分支)。切换分支后,仓库里的文件内容会变到与当前分支相同。
git merge [branch] 将指定分支合并到当前分支。当合并分支与当前分支有冲突时,git会在合并后的文件中标注出来,须手动消除冲突后再提交一次。
git branch -d [branch] 删除指定分支
git stash 隐藏当前分支的工作现场,比如工作进行到一半时无法提交,但必须切换分支,此时可使用这个命令。
git stash list 列出被隐藏起来的工作现场
git stash apply/drop 恢复现场/...并删除隐藏的工作现场
远程操作
git remote 查看远程库信息(参数-v查看详细信息)
git remote add [remote branch] [server]:在远端服务器上克隆本地仓库,远程库名默认为origin
git push [remote branch] [branch]:将分支推送到远端仓库(第一次推送时在push后面加上-u参数)
git clone [remote address]:将远端(Github)的仓库克隆到本地,git自动将本地master和远程master对应起来
策略:哪些分支需要推送?
  1. master是主分支,需要时刻与远程同步
  2. 开发分支不需要推送到远程,可以合并到master之后再推送
git pull 从远程拉取分支到本地
git branch --set-upstream-to [local branch] origin/[branch] 关联本地分支与远程分支
 

多人协作工作模式一般是这样的:

  1. 首先,可以试图用git push origin branch-name推送自己的修改.
  2. 如果推送失败,则因为远程分支比你的本地更新早,需要先用git pull试图合并。
  3. 如果合并有冲突,则需要解决冲突,并在本地提交。再用git push origin branch-name推送。

 

附:利用git向服务器部署Node.js项目代码的方法:

  1. 在服务器上创建项目目录,初始化为git仓库:git init,配置为允许接收代码提交:git config receive.denyCurrentBranch ignore
  2. 在本地项目创建远程分支:git remote add 远程分支名 ssh://用户名@远程地址/项目路径/.git
  3. 将项目的master分支push到服务器上:git push 远程分支名 master
  4. 到服务器端git staus,会发现暂存区内一堆的反操作(例如将本来应该保留的文件delete掉)。此时先更新再检出代码 git update-server-info、git checkout -f,效果是将所有文件还原到最后一次commit的版本,暂存区内的修改被丢弃。
  5. 然后npm install补上node_modules就可以了!
  6. 服务器端添加自动更新钩子脚本:1)cd .git/hooks;2) 新建 post-receive 或将 post-receive.sample 重命名为 post-receive;使用post-update也可以, 不过需要先将post-update中的exec git update-server-info这一行删掉;3)vim post-receive,将如下内容复制到文件中
    • #!/bin/sh
    • unset GIT_DIR
    • cd ..
    •  git checkout -f
  7. 安装pm2来守护网站
  8. 在Linux系统下监听低于1024的端口,需要root权限,为此用一个变通的办法,即利用ip表设置80端口的信息与3000端口互相转发,此转发在网卡层面,性能很高。方法如下:
    1. 输入sudo iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 3000
    2. 切换到root用户
    3. 输入iptables-save>/etc/iptables-rules
    4. 编辑/etc/network/interfaces文件,在最后一行插入:pre-up iptables-restore</etc/iptables-rules,实现开机自动配置

以上是关于git学习笔记的主要内容,如果未能解决你的问题,请参考以下文章

Git 学习笔记

git常用命令笔记

git常用命令,参照廖雪峰老师的git教程

学习笔记——Git命令

Git学习笔记

廖雪峰Git教程笔记与总结 -- Git简介常用命令分支管理