一、git基本命令
1)git init #在本地建一个git管理目录
2)git clone git://...git #将仓库中的全部分支分支克隆到本地当前git管理目录
3)git status #查看当前目录中,文件的修改状态
4)git add 文件名 #添加到git管理
5)git diff #查看当前目录所有修改过的文件(修改过还没有使用commit提交的文件)
6)git diff --cached #可以查看使用add阶段化后的差别
7) git diff branch_name #比较当前分支与branch_name分支的不同
7)git diff 节点号1 节点号2 #比较2个节点的不同
7)git rm 文件名 & git rm -r 文件夹 #删除文件和文件夹
8)git commit --m "new version" #提交到本地库
9)git push origin master #将本地库同步到远程核心库
10) git checkout branchname #切换到某个分支或检出一个远程分支
11) git revert HEAD #还原最近一次提交的修改 (HEAD始终指向当前分支的当前节点)
12) git revert commit-id #还原到指定节点的修改:
13) git log -p branch_name #显示当前分支的提交记录,及代码变更。
13) git log #显示当前分支的提交记录
origin的含义:在clone完成之后,Git 会自动为你将此远程仓库命名为origin(origin相当于一个远程仓库的别名,运行git remote –v或者查看.git/config可以看到origin的含义
二、git分支管理(分支管理开发过程:http://blog.jobbole.com/25877/)
1.git branch -a 查看所有分支,包括远程的origin/master和本地的master(origin/master是存储在本地的远程主分支)
2.git fetch 将远程的代码同步到origin/master,但是没有合并到master分支;这一步一般不会有冲突
3.git merge 合并origin/master与master分支,可能产生冲突;也可以用rebase,这样可以减少分支的出现
4.git log --oneline --graph --stat origin/master -p 查看分支的log,-p显示修改部分
5.git difftool 比较更改
6.git checkout 检出当前分支中的代码到工作目录,覆盖工作目录中的指定文件
(1)git checkout filename 从暂存区(cash)中检出文件,覆盖工作目录中的指定文件
(2)git checkout HEAD filename 从仓库中检出文件,覆盖暂存区和工作目录.
7.reset和checkout的比较:
(1)checkout不能做commithash之间的复位
(2)一次checkout一定会改变工作目录的内容,使得工作目录中的内容与暂存区或与仓库中的俄内容一致.
(3)一次reset一定会试图改变HEAD的位置,reset之后,HEAD都会指向指定节点commithash,如果该commithash不是HEAD,那么该commithash之后的节点将会从仓库中被删除.checkout是不会影响HEAD位置的.
(4)reset可以将仓库中的commithash还原到指定commithash;可以将暂存区还原到仓库中的指定commithash;可以将工作目录还原到仓库中的指定commithash
git reset --hard HEAD = git checkout HEAD 检出到本地工作目录和暂存区
git reset HEAD 检出到暂存区,默认为--soft(如果暂存区有add的提交,将会被回退到unstaged状态,工作目录不变,这种情况任何已有的修改都不会丢失)
git reset --hard HEAD = git reset HEAD + git checkout
(4)重点:checkout针对于每个文件的还原;reset针对于所有文件(整体状态)的还原
8.git diff
(1)git diff file 比较工作目录与暂存区的不同
(2)git diff --cached file 比较暂存区与仓库的不同
(3)git diff commithash file 比较工作目录与仓库的不同,如果时当前HEAD,那么commithash=HEAD
(4)git diff commithash1 commithash2 file 计较任意2个commithash的不同
(5)git diff branchname filename 比较当前分支与指定分支的不同
9.git log
(1)git log brname 查看任意分支的log (有意选项:--graph --oneline)
(2)git log origin/master 查看origin/master远程分支的log有重要的意义,可以知道远程分支的开发;使用fetch也是同步到该分支,不会产生冲突
(3)git log --stat HEAD 查看HEAD commithash修改过的文件有哪些
(4)git show 查看文件的具体修改内容
10.分支管理
1)git branch-a 列出本地所有分支(包括隐含分支)
2)git branch -r #列出远程所有分支
3)git branch -a #列出本地分支和远程分支
4)git clone -b branchname https://github.com/jetty/ #克隆指定的远程分支
5)git branch newbranchname #新建一个本地分支
6)git checkout branchname #切换到分支branchname,并将该分支检出到工作目录和暂存区
7)git checkout -b newbranchname #创建并切换到新分支
8)git branch -m|-M oldbranch newbranch #重命名分支,如果newbranch名字分支已经存在,则需要使用-M强制重命名,否则,使用-m进行重命名。
9)git branch -d|-D branchname #删除[-D强制删除]branchname分支
10)git branch -d -r branchname #删除远程branchname分支
11)git branch newbranch commithash #以commithash为起点,创建新分支newbranch
12)git remote -v #查看origin对应的远程仓库地址
13) git remote add origin http://10.9.111.221/liujin/multiproject.git #修改origin对应的远程分支
13)git log --oneline --decorate --graph --all #查看提交历史、各分支指向以及分支的分叉情况
14)git push origin : branchname#推入origin指向的远程地址的branchname分支
15)git checkout maste -> git merge branchname#将branchname分支合入主分支,修改冲突的文件后,git add 文件 然后git commit
16)git tag -a 1.2 #打一个标签
11.合并与提交
fetch与pull
在将本地的代码库合并到远程代码库之前,需要做一次fetch或pull,并解决相关的冲突
1). 合并步骤
a. git fetch:相当于是从远程获取最新版本到本地origin/master,不会自动merge,于是不会产生冲突
git fetch origin master //首先从远程的origin的master主分支下载最新的版本到origin/master分支上,origin/master分支是一个隐形分支
git log -p master..origin/master //然后查看远程的log,-p显示每次提交的代码的修改部分
b. git merge origin/master //最后进行合并
上述过程其实可以用以下更清晰的方式来进行:
git fetch origin master:tmp //从远程获取最新的版本到本地的tmp新分支上(:指取一个别名)
git diff tmp //比较当前分支与tmp分支的不同
git merge tmp //之后再进行比较合并,并解决冲突
git branch -d tmp //删除临时分支
2). git pull:相当于是从远程获取最新版本并merge到本地(相当于svn的update)
git pull origin master //更新远程版本库到本地版本库
git pull origin branchname //拉取fork库中的一个分支
上述命令其实相当于git fetch 和 git merge
在实际使用中,git fetch更安全一些
因为在merge前,我们可以查看更新情况,然后再决定是否合并
3).merge
git merge tmp //将当前分支与tmp分支合并,如果存在冲突,那么修改冲突所在的文件,然后使用以下命令提交修改的文件
git commit -a -m 'Resolved conflict' //提交(也可以用add和commit 2条命令替代)
git push origin master
最后就可以push到远程版本库了
在有冲突的文件中
<<<<<<<标记冲突开始,后面跟的是当前分支中的内容。
HEAD指向当前分支末梢的提交。
=======之后,>>>>>>>之前是要merge过来的另一条分支上的代码。
>>>>>>>之后的符号是该远程分支的名字。
三.提交远程版本库与合并
fetch与pull
在将本地的代码库合并到远程代码库之前,需要做一次fetch或pull,并解决相关的冲突
1. git fetch:相当于是从远程获取最新版本到本地,不会自动merge
git fetch origin master //首先从远程的origin的master主分支下载最新的版本到origin/master分支上,origin/master分支是一个隐形分支
git log -p master..origin/master //然后查看远程的log,-p显示每次提交的代码的修改部分
git merge origin/master //最后进行合并
上述过程其实可以用以下更清晰的方式来进行:
git fetch origin master:tmp //从远程获取最新的版本到本地的tmp新分支上(:指取一个别名)
git diff tmp //比较当前分支与tmp分支的不同
git merge tmp //之后再进行比较合并,并解决冲突
git branch -d tmp //删除临时分支
2. git pull:相当于是从远程获取最新版本并merge到本地(相当于svn的update)
git pull origin master //更新远程版本库到本地版本库
git pull fork源 分支 //拉取fork库中的一个分支
上述命令其实相当于git fetch 和 git merge
在实际使用中,git fetch更安全一些
因为在merge前,我们可以查看更新情况,然后再决定是否合并
3.merge
git merge tmp //将当前分支与tmp分支合并,如果存在冲突,那么修改冲突所在的文件,然后使用以下命令提交修改的文件
git commit -a -m 'Resolved conflict' //提交(也可以用add和commit 2条命令替代)
git push origin master
最后就可以push到远程版本库了
在有冲突的文件中
<<<<<<<标记冲突开始,后面跟的是当前分支中的内容。
HEAD指向当前分支末梢的提交。
=======之后,>>>>>>>之前是要merge过来的另一条分支上的代码。
>>>>>>>之后的符号是该远程分支的名字。
本文转自 a_liujin 51CTO博客,原文链接:http://blog.51cto.com/a1liujin/1725379,如需转载请自行联系原作者