Git的完整学习教程: http://www.liaoxuefeng.com/
参考: http://blog.csdn.net/kevindgk/article/details/51606925
1.创建版本库:
创建空目录:mkdir {dirname}
cd {dirname}
把目录变成git可以管理的仓库: git init 或者 git --bare init
把文件添加到仓库(文件必须在仓库目录或者子目录下):git add {filename}
把文件提交到仓库:git commit -m "xxx"
-m 后面的内容为提交的说明;
可以先添加多个文件然后一次提交;
2.版本控制:
版本回退:
查看仓库当前状态:git status
查看文件具体修改内容:git diff {filename}
查看历史提交日志记录:git log
查看精简历史提交日志记录:git log --pretty=oneline
版本回退到上个版本:git reset --hard HEAD^
版本回退到上上个版本:git reset --hard HEAD^^
版本回退到上100个版本:git reset --hard HEAD~100
版本回退到任意版本:git reset --hard commit_id
可以通过查看每一次git命令的使用记录获取版本号:git reflog
工作区和暂存区:---->
管理修改:---->
撤销修改:
撤销文件在工作区的修改:git checkout -- {filename}
回到最近一次git commit 或者 git add 状态,
两种情况:
一种是文件自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;
一种是文件已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。
对已经add到暂存区的文件,把暂存区的修改撤销掉,重新回到工作区:git reset HEAD {filename}
HEAD表示最新的版本
对已经commit的文件,想要撤销本次提交,可以版本回退,前提是 没有推送到远程库;
删除文件:
当在工作区把文件删除(工作区和版本库不一致):rm {filename}
的确需要删除版本库中文件:git rm {filename}
git commit -m "remove filename"
误删,文件恢复即可(但是会失去commit后修改的内容):git checkout -- {filename}
git checkout其实是用版本库里的版本替换工作区的版本,无论工作区是修改还是删除,都可以“一键还原”,
3.远程仓库:
添加远程库:---->
从远程库克隆:---->
4.分支管理:
创建合并分支:
创建dev分支,然后切换到dev分支:git checkout -b dev
相当于命令:git branch dev
git checkout dev
分支名随意起,
查看当前分支:git branch
当前分支前会有*号标志
切换到master分支:git checkout master
把dev分支合并到master分支:git merge dev
merge把目标分支合并到当前分支;
合并完成后删除dev分支:git branch -d dev
查看分支合并图:git log --graph
解决冲突:---->
分支管理策略:合并分支,如果可能,git采用fast forward模式,这种模式删除分支后会丢掉分支信息,
可以强制禁用Fast forward模式,Git就会在merge时生成一个新的commit,这样,从分支历史上就可以看出分支信息。
合并分支禁用fast forward模式:git merge --no-ff -m "merge with no-ff" dev
bug分支:修复bug时,我们会通过创建新的bug分支进行修复,然后合并,最后删除;
当手头工作没有完成时,先把工作现场git stash一下,然后去修复bug,修复后,再git stash pop,回到工作现场。
存储当前工作现场:git stash
查看stash列表:git stash list
stash可以多次,
恢复工作现场:git stash apply
删除stash内容:git stash drop
恢复工作现场同时删除stash内容:git stash pop
恢复到指定stash:git stash apply stash@{0}
feature分支:添加一个新功能时,你肯定不希望因为一些实验性质的代码,把主分支搞乱了,
所以,每添加一个新功能,最好新建一个feature分支,在上面开发,
完成后,合并,最后,删除该feature分支。
如果新功能取消,feature分支还没有合并,使用git branch -d feature 将会销毁失败,
使用强行删除命令:git branch -D feature
多人协作:当从远程仓库克隆时,实际上Git自动把本地的master分支和远程的master分支对应起来,远程仓库默认名称origin,
查看远程库信息:git remote
查看远程库详细信息:git remote -v
推送分支:git push origin {branchname}
根据需要推送对应的分支;
抓取分支:git pull
有冲突,要先解决冲突,
本地创建和远程分支对应的分支:git checkout -b branch-name origin/branch-name
本地和远程分支的名称最好一致,
建立本地分支和远程分支的关联:git branch --set-upstream branch-name origin/branch-name
多人协作的工作模式:
首先,可以试图用git push origin branch-name推送自己的修改;
如果推送失败,则因为远程分支比你的本地更新,需要先用git pull试图合并;
如果合并有冲突,则解决冲突,并在本地提交;
没有冲突或者解决掉冲突后,再用git push origin branch-name推送就能成功!
如果git pull提示“no tracking information”,则说明本地分支和远程分支的链接关系没有创建,用命令git branch --set-upstream branch-name origin/branch-name。
5.标签管理:
创建标签:---->
操作标签:---->
6.git服务器的搭建
Ubuntu(Linux)下git服务器的搭建:
a.如果Linux没有装git,先安装git,需要sudo权限;
安装git:sudo apt-get install git
(安装的方式很多,百度一下一堆)
git config --global user.name "Your Name"
git config --global user.email "email@example.com" //name和email的话现在设不设无所谓,需要的时候系统会提示你的...
b.如果Linux没有安装SSH,
安装SSH:sudo apt-get install ssh
c.如果要给git用户加一些权限管理,安装gitosis,gitolite,自行百度吧;
我没安装过,现在的开发场景也用不到;
d.生成SSH公钥,
ssh-keygen -t rsa -C "your_email@youremail.com"
然后呢
在命令行会出现这么一些文字提示:
Enter file in which to save the key (.......) //括号里面的就是密钥保存的位置
........already exists ,overwrite (y/n)? //公钥已经存在,是否覆盖? 键入 y
Enter passphrase (empty for no passphrase): //加密码,直接回车代表不设置密码
Entry same passphrase again: //确认密码
然后呢,成功了...当然没有啦
e.git客户端的配置,
如果是Linux,重复a,b,d;
如果是Windows,安装个msysgit,下载地址:https://git-for-windows.github.io/或者http://pan.baidu.com/s/1skFLrMt#path=%252Fpub%252Fgit
安装完成后,随便找个地方鼠标右键Git Bush here ,进入命令行窗口,
git config --global user.name "Your Name"
git config --global user.email "email@example.com"
然后重复d,Windows系统在C:\Users\EtherealPatrick\.ssh\下可以找到密钥 //EtherealPatrick代表用户名,比如我的用户名就是EtherealPatrick
id_rsa是密钥,不用管;
id_rsa.pub是公钥, 可以用NotePad++等编辑器打开,里面就是一行公钥.....待会会有用
f.Windows系统可以使用xshell进入Linux服务器,xshell的使用so easy,不会就baidu吧
接下来是Linux的一些文件操作命令,不熟悉的可以百度了解先,
ls //directory listing
ls -al //formatted listing with hidden files
cd dir //change directory to directory
cd - //change to home
pwd //show current directory
mkdir dir //create directory dir
vi xxx //create file xxx ,if xxx is exist ,open file xxx
:wq //save and quit
Ctrl+c ,Ctrl+v //不解释
总结一下马上要做的事:
在服务器的.ssh目录下创建一个名为authorized_keys的文件,
将客户端.ssh目录下的id_rsa.pub的内容拷贝到authorized_keys
所以:
ls -al
cd .ssh
vi authorized_keys
i //键入i,下方会有--INSERT--提示,进入编辑模式
然后,如果是Linux,按照上面方法进入id_rsa.pub,将公钥Ctrl+c,Ctrl+v 到authorized_keys
如果是Windows,用个编辑器打开id_rsa.pub,将公钥Ctrl+c,Ctrl+v 到authorized_keys
Esc //退出编辑模式
:wq //保存并退出文件
g.git服务器创建版本库:
mkdir TestGitService.git //TestGitService.git 项目名
cd TestGitService.git
git --bare init
h.git客户端clone git服务器仓库
在需要clone仓库的目录下:git clone syh@123.123.123.123:/home/syh/TestGitService.git 即可
说明:
syh是我的服务器用户名;
pwd 你可以看当前的目录,上面我已经提到过,
123.123.123.123是我的服务器的ip,
i. 如果本地有项目从远程仓库将空的项目clone下来,你会得到一个空的项目文件夹,里面有一个隐藏的.git文件夹;
将.git文件夹直接copy到你本地的安卓项目的根目录下;
在你的安卓项目的根目录中直接右键,选择git bash,进入git的命令行 ;
分别运行:git status
git add .
git commit -m "本次修改的标记"
git pull origin master
git push origin master
没项目的话,在本地的TestGitService目录下创建项目就行了...
大写的 未完待续...
|
|