码迷,mamicode.com
首页 > 其他好文 > 详细

Git学习笔记

时间:2015-09-23 01:17:16      阅读:174      评论:0      收藏:0      [点我收藏+]

标签:git

Git :分布式版本控制系统


Git is a free and open source distributed version control system designed to handle everything from small to very large projects with speed and efficiency.


1.git简介

--安装Git:

# yum install -y git



--配置属性

# git config --global user.name "Your Name"  #设置名字和email,为全局设置,会影响此用户建立的每个项目

# git config --global user.email "email@example.com"


--创建版本库

# mkdir dr_name # 版本库名自定义

# cd dr_name 

# git init   # 创建一个空的git仓库或者重新初始化一个已存在的



2.时光机穿梭

--添加文件到Git仓库

# git add file1 file2 file3   # 将修改内容从工作区添加到暂存区

# git commit -m ‘Save file1-3‘ # 将暂存区所有内容提交到当前分支,-m添加本次提交的注释信息

ps: 文件必须得保存在git仓库中,工作目录也得为git仓库路径


--查看版本库状态

# git status


--查看已做修改但没被添加到索引的修改

# git diff 


--查看提交历史

# git log --pretty=oneline # 按每行格式化日志输出


--版本回退

# git reset --hard arg

arg: 

(1) HEAD: 表示当前版本

HEAD^:表示上个版本

HEAD^^:表示上上个版本

HEAD~30:表示往上30个版本

# git reset --hard HEAD^:回复到上个版本


(2) commit_id

# git reset --hard 3628164


--查看命令历史

# git reflog


--工作区和暂存区

工作区:当前git工作目录 如learngit

暂存区:工作区里有个版本库即.git,版本库里有暂存区,每次git add都是将文件提交到暂存区,git commit则是将文件从暂存区提交到分支上


--查看当前工作目录下file_name与上次提交之间的差别

# git diff HEAD -- file_name


--Git跟踪的是内容不是文件


3.撤销修改操作

--file_name自修改后还没有被放到暂存区(即未git add)

# git checkout -- file_name # 丢弃工作区的修改,实现版本库的版本替换工作区的版本,回到最近一次git add 或git commit的状态


--file_name已经添加到暂存区后,又作了修改(即已git add但未git commit)

# git reset HEAD file_name  # 丢弃暂存区的修改

# git checkout -- file_name # 丢弃工作区的修改,实现版本库的版本替换工作区的版本,回到最近一次git add 或git commit的状态


--file_name已经加入到当前分支中

# git reflog # 先查询命令历史

# git reset --hard commit_id    # 执行版本回退


4.删除文件

--删除文件后不想恢复文件

# git rm file_name

# git commit

ps:使用rm删除文件之后,使用git commit -m "Message" -a也可提交 


--删除之后想恢复文件

# git rm file_name

# git checkout HEAD file_name


5.远程仓库

--添加远程库

# git remote add origin https://github.com/github_username/dr_name.git #将本地库与github远程库关联起来,使用https协议

# git remote add origin git@git.com:github_username/dr_name.git  # #将本地库与github远程库关联起来,使用https协议

# git push -u origin master  #当前master分支内容推送到github远程库,-u为当前本地master分支与远程master关联起来,往后不用加-u

# git push origin master #一旦本地做了修改,执行此条命令即可同步到github


--从远程库克隆

# git clone  https://github.com/github_username/dr_name.git #克隆github远程库到本地库


ps:git支持多种协议,如https等,默认为ssh。

6.分支管理

--创建分支

# git branch branch_name 


--切换分支

# git checkout branch_name

# git checkout -b develop origin/dev 从远程拉取dev分支到本地,命名为develop,并切换到develop分支


--创建新分支并切换

# git checkout -b branch_name # -b参数为创建的意思,不加此选项就为切换分支,此条命令相当于上两条命令


--查看所有分支,当前分支前会有一个*号

# git branch


--合并制定分支到当前分支

# git merge branch_name


--删除分支

# git branch -d branch_name   # -d只能删除已经被当前分支合并过的分支

# git branch -D branch_name   # 删除未经合并的分支


--查看合并分支图

# git log --graph --pretty=oneline --abbrev-commit


--解决冲突 

# 手动解决冲突,再提交就ok

# git add file_name

# git commit -m "phrase"


--合并分支时禁用Fast Forward(禁用次模式,git log 可以看到合并历史)

# git merge --no-ff -m "merge with no-ff" branch_name


--分支管理策略

# 首先,master分支应该是非常稳定的,也就是仅用来发布新版本,平时不能在上面干活;

 那在哪干活呢?干活都在dev分支上,也就是说,dev分支是不稳定的,到某个时候,比如1.0版本发布时,再把dev分支合并到master上,在master分支发布1.0版本;

 你和你的小伙伴们每个人都在dev分支上干活,每个人都有自己的分支,时不时地往dev分支上合并就可以了。


--保存现场

# git stash # 当离开工作区,又不想保存,即可在离开时隐藏这些内容


--查看所有保存现场列表

# git stash list 


--恢复现场

# git stash apply [stash@{n}]  # 恢复现场的同时,保存现场的记录不会删除掉,需手动删除

# git stash drop  [stash@{n}]  # 手动删除stash记录

# git stash pop   [stash@{n}]  # 恢复现场的同时删除掉stash记录


--查看远程库

# git remote # -v参数详细信息


--分支推送策略

# master分支是主分支,因此要时刻与远程同步;


# dev分支是开发分支,团队所有成员都需要在上面工作,所以也需要与远程同步;


# bug分支只用于在本地修复bug,就没必要推到远程了,除非老板要看看你每周到底修复了几个bug;


# feature分支是否推到远程,取决于你是否和你的小伙伴合作在上面开发。


--pull远端到本地

# git branch  --set-upstream-to=origin/<remote_branch_name> <local_branch_name>  # pull远端分支代码到本地当前分支


--多人协作模式

# 首先,可以试图用git push origin branch-name推送自己的修改


# 如果推送失败,则因为远程分支比你的本地更新,需要先用git pull试图合并


# 如果git pull提示“no tracking information”,则说明本地分支和远程分支的链接关系没有创建,git branch --set-upstream branch-name origin/branch-name


# 再进行合并,如果合并有冲突,则解决冲突,并在本地提交


# git push origin branch-name # 推送到远程库


7.标签管理

--创建标签

# git tag tag_name   # 为当前所在分支创建标签

# git tag tag_name commit_id # 为过去某一次提交打标签,可先用git log --pretty=oneline --abbrev-commit查看提交历史

ps:-a参数自定义标签名,-m参数添加注释信息,-s使用PGP签名,-u使用另一个Key签名此tag


--查看本地库所有标签

# git tag #仅是列出所有标签列表


--查看某个标签详细信息

# git show tag_name


--删除本地标签

# git tag -d tag_name


--推送标签到远程库

# git push origin <tagname>   # 推送某个标签

# git push origin --tags # 推送全部未推送过的本地标签


--删除远程库标签

# git tag -d tag_name   # 先删除本地库标签

# git push origin :refs/tags/tag_name # 删除远程库标签 


8.自定义git

--修改git显示颜色

# git config --global color.ui true


--忽略某些文件

# touch .gitignore # 在git跟目录创建一个.gitignore的隐藏文件

# echo -e "# My configurations:\nfile_name" > .gitignore # 将忽略的文件名或是类型写入此文件中

# git add .gitignore # 添加到暂存区

# git commit -m "Add gitignore file" # 提交


--配置别名

# git config --global alias.st status # 定义st为status的别名,--global针对当前用户所有仓库生效,不加则只对当前仓库生效

# git config --global alias.lg "log --color --graph --pretty=format:‘%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset‘ --abbrev-commit"    # 定义lg为log加一串参数的别名

# 全局属性配置文件路径存放位置: .git/config

# 当前仓库配置文件路径存放位置: .gitconfig


--搭建Git服务器(/src/gitdir)

# yum install -y git # 使用yum安装git

# useradd git # 创建一个git用户,用来运行git服务

# 收集所有需要登录的用户的公钥,就是他们自己的id_rsa.pub文件,把所有公钥导入到/home/git/.ssh/authorized_keys文件里,一行一个。


# git init --bare gitdir.git # 创建一个赤裸的git库


# chown -R git:git gitdir.git # 修改git目录属主属组都为git


# sed  ‘s@\/bin\/bash@/bin/nologin@g‘ /etc/passwd # 禁止git用户登陆系统


# git clone git@server:/srv/gitdir.git # 在本地克隆git服务器上的远程库


ps:要方便管理公钥,用Gitosis,要像SVN那样变态地控制权限,用Gitolite。



本文为学习廖雪峰官方网站上Git教程后自己整理的笔记


Git官方站点:http://www.git-scm.com/


廖雪峰官方网站Git教程:http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000


Git Community Book 中文版:http://gitbook.liuhui998.com/index.html


GitHub Cheat Sheet:https://training.github.com/kit/downloads/github-git-cheat-sheet.pdf






本文出自 “Hello,Linux” 博客,转载请与作者联系!

Git学习笔记

标签:git

原文地址:http://soysauce93.blog.51cto.com/7589461/1697284

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!