赞
踩
最近使用git已经有三个月了,是时间总结一下了。先说明git和svn最大的两点区别:
1)使用上:git多了本地分支,所以与真正分支有了隔离,并且offline也可以看log等,指令较多。但是提供了pull request等功能,功能更加强大。
2)最核心的区别Git是分布式的,而Svn不是分布的。git使用元数据和head等来处理多版本,而svn真的是多个文件
整体来说感觉git灵活,强大但难于掌握点。
详细区别借鉴:https://www.cnblogs.com/mtl-key/p/6902627.html
Git log 停止 control + z
主要操作指令与流程如下:
1 clone项目到本地,先cd到你的工作空间,然后执行
git clone ssh://user@host/path/to/repo.git
2 查看本地分支的提交和修改
git status 展示所做变化,包括workspace中的和已经commit到本地分支的
对于workspace中的修改:提示如 modified: src/main/webapp/org/cboard/view/dashboard/param/cascading.html
对与已经提交到本地分支的修改:提示如 Your branch is ahead of 'origin/cboard/100' by 1 commit.
3 提交修改到暂存区,暂存区到本地分支
git add 是处理暂存区和你workspac中的修改,执行git add什么都不会做,增加了参数才可以
git add -A 提交所有变化
git add -u 提交被修改(modified)和被删除(deleted)文件,不包括新文件(new)
git add . 提交新文件(new)和被修改(modified)文件,不包括被删除(deleted)文件 ‘’
git commit -m "提交的注释" 将暂存区的修改提交到本地分支
注意git中代码的提交分为三个层次,你修改的代码实际在workspace中,add后修改保存到本地暂存区,commit后保存到本地分支,push后保存到远程分支,只有提交到远程分支别人才可以获取到你的代码。
4 拉取所有上游提交命令到本地仓库,并尝试和她的本地修改合并:git pull --rebase origin master
--rebase
选项告诉Git
把本地提交移到同步了中央仓库修改后的master
分支的顶部,如果有冲突:
git add <some-file>
git rebase --continue
5 提交本地分支到远程分支:git push origin master
注意,origin
是在克隆仓库时Git
创建的远程中央仓库别名。master
参数告诉Git
推送的分支
6 新建分支
在开始开发功能前,小红需要一个独立的分支。使用下面的命令新建一个分支:
git checkout -b marys-feature master
这个命令检出一个基于master
名为marys-feature
的分支,Git
的-b
选项表示如果分支还不存在则新建分支。
7
- git push -u origin marys-feature
- git push
这条命令push
marys-feature
分支到中央仓库(origin
),-u
选项设置本地分支去跟踪远程对应的分支。
设置好跟踪的分支后,小红就可以使用git push
命令省去指定推送分支的参数。
8合并marys-feature的内容到master
- git checkout master
- git pull
- git pull origin marys-feature
- git push
首先要检出master
分支并用git pull确认是它是最新的。然后执行git pull origin marys-feature
合并marys-feature
分支到和已经和远程一致的本地master
分支。
当然你在执行git pull origin marys-feature是可能会有如下提示:
说明存在冲突,如下图冲突的PageType,
你需要修改成正确的,然后执行
$:git add filename
$:git commit -m "message",如果你存在冲突没有解决,那么此时依旧会提示,如下图:
说明这些文件都是你需要处理,然后一起 add,才能commit成功。
9或者用merge的方式,先创建并使用some-feature分支
git checkout -b some-feature develop
他们用老套路添加提交到各自功能分支上:编辑、暂存、提交:
- git status
- git add <some-file>
- git commit
添加了提交后,小红觉得她的功能OK了。如果团队使用Pull Requests
,这时候可以发起一个用于合并到develop
分支。将some-feature合并到develop:
- git pull origin develop
- git checkout develop
- git merge some-feature
- git push
- git branch -d some-feature
第一条命令在合并功能前确保develop
分支是最新的。注意,功能决不应该直接合并到master
分支。
git rebase指令详解:
git rebase指令的使用,在本地仓库对commit进行处理,注意此命令执行后没有push到远程仓库
rebase作用1:在本地仓库合并多个commit为一个完整commit
git rebase -i [startpoint] [endpoint] 在这里面进行对所有提交到本地仓库还没有提交到远程仓库的commit进行操作,可以删除合并等,
其中-i的意思是--interactive,即弹出交互式的界面让用户编辑完成合并操作,[startpoint] [endpoint]则指定了一个编辑区间,如果不指定[endpoint],则该区间的终点默认是当前分支HEAD所指向的commit(注:该区间指定的是一个前开后闭的区间)。
操作指令解释如下:
pick:保留该commit(缩写:p)
reword:保留该commit,但我需要修改该commit的注释(缩写:r)
edit:保留该commit, 但我要停下来修改该提交(不仅仅修改注释)(缩写:e)
squash:将该commit和前一个commit合并(缩写:s)
fixup:将该commit和前一个commit合并,但我不要保留该提交的注释信息(缩写:f)
exec:执行shell命令(缩写:x)
drop:我要丢弃该commit(缩写:d)
第一次wq后会进入修改注释页面
如果退出后需要继续编辑使用指令如下
git rebase --conitnue 会进入commit对应注释的处理,就是可以修改你提交到本地仓库时的注释
然后 退出就会自动提交
get rebase --abort 放弃rebase
rebase作用2:将某一段commit粘贴到另一个分支上
现在所在的分支是cboard/100,gi他log结果如下:
现在新建branch dev;指令如下:git branch dev;现在想把commit1的内容粘贴到dev上
执行指令如下 :git rebase 155288695 b45901a42 --onto dev
注意:虽然此时HEAD所指向的内容正是我们所需要的,但是dev分支是没有任何变化的,git
只是将C~E部分的提交内容复制一份粘贴到了dev所指向的提交后面,我们需要做的就是将dev所指向的提交id设置为当前HEAD所指向的提交id就可以了
git checkout dev
git reset --hard b45901a42
写完代码后,我们一般这样
git add . //添加所有文件
git commit -m "本功能全部完成"
执行完commit后,想撤回commit,怎么办?
这样:
git reset --soft HEAD^
这样就成功的撤销了你的commit
注意,仅仅是撤回commit操作,您写的代码仍然保留。
1.重命名 git branch -m oldBranchName newBranchName
2.删除远程分支:git push origin :oldBranchName
3.将重命名过的分支提交:git push origin newBranchName
设置本地分支的数据源:
git branch --set-upstream-to=origin/branch_105
建议深入了解git工作方式的仔细看下下面的博客,很受益:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。