简介
Git 是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。
状态模型
- 工作区(workplace)
- 暂存区(index)
- 本地仓库(local repository)
- 远程仓库(remote repository)
仓库管理
工作区(workpace->暂存区(index)
git add . #当前文件夹以及子文件夹 git add fileName #某个文件
暂存区(index)->本地仓库(local repository)
git commit -m '备注提交内容'
克隆远程仓库
git clone -b xxxxx分支 xxxx地址 (不加分支默认master) #默认拉取master分支代码 git clone git@gitee.com:liuzhenyu666/test0130.git #拉取dev分支代码 git clone -b dev git@gitee.com:liuzhenyu666/test0130.git
查看远程仓库
git remote -v
同步远程仓库
#未关联远程仓库时 git pull origin xxxxx git push origin xxxxx #关联之后,不需要加分支名字 git pull git push
设置本地仓库和远程仓库关联
git push --set-upstream origin xxx
工作常用步骤
git status #查看当前仓库状态 git add . #添加到暂存区 git commit -m 'xxxx' #添加到本地仓库 git pull # 同步远程仓库到本地,检查远程仓库是否比本地版本更高一些 git push #推送到远程仓库
注:千万记住不要使用 -f参数,会强制用本地仓库覆盖远程仓库例如:git push -f 或 git push orign
日志查看
提交日志
git log #日志 git log --pretty=oneline #美化输出,行格式显示 git log --pretty=oneline --abbrev-commit #简化版本号 行格式显示
历史命令日志
#版本相关,如果再版本回滚时误操作了,可以通过这 #个地方来找历史的版本号和命令进行恢复 git reflog
撤销和回退
撤销修改
git checkout xxx #撤销某个文件修改 git checkout . #撤销当前文件夹内所有修改 git reset --hard HEAD #放弃暂存区中所有的修改和新增
版本回退,慎用
git reset --hard xxxcommit版本号 #回退到某个版本 git reset --hard HEAD #放弃当前所有修改,回退到当前版本 git reset --hard HEAD^ #回退到上一个版本
分支管理
查看分支
git branch #查看本地分支 git branch -a #查看所有分支
创建分支
git checkout -b xxx分支名字 #创建并切分支
git branch xxx分支 #创建 git checkout xxx分支 #切分支
合并分支到当前分支
git merge xxx分支名字
删除分支
git branch -d # 删除已合并的分支,有未合并代码不允许删除 git branch -D # 强制删除有未合并代码的分支 git push origin --delete dev_new #删除远程分支
本地分支和远程分支第一次关联
git push --set-upstream origin master0513
标签管理
发布一个版本时,我们通常先在版本库中打一个标签(tag),这样,就唯一确定了打标签时刻的版本。将来无论什么时候,取某个标签的版本,就是把那个打标签的时刻的历史版本取出来。所以,标签也是版本库的一个快照。
Git的标签虽然是版本库的快照,但其实它就是指向某个commit的指针(跟分支很像对不对?但是分支可以移动,标签不能移动),所以,创建和删除标签都是瞬间完成的。
Git有commit,为什么还要引入tag?
“请把上周一的那个版本打包发布,commit号是6a5819e...”
“一串乱七八糟的数字不好找!”
如果换一个办法:
“请把上周一的那个版本打包发布,版本号是v1.2”
“好的,按照tag v1.2查找commit就行!”
所以,tag就是一个让人容易记住的有意义的名字,它跟某个commit绑在一起。
创建和查看
git tag v1.0 #创建一个v1.0的标签 git tag v0.9 f52c633 #基于某一个版本,创建一个v0.9的标签 #基于某一个版本,添加备注,创建一个v0.1的标签 git tag -a v0.1 -m "version 0.1 released" 1094adb git tag #查看标签列表 git show <tagname> #查看某个标签详情 git checkout tagname #切标签
同步和删除
git tag -d v0.1 #删除本地分支 git push origin v1.0 #推送某个分支到远程 git push origin --tags #推送所有分支到远程
删除远程标签
#先删除本地标签 git tag -d v0.9 #后删除远程标签 git push origin :refs/tags/v0.9
解决冲突
- CONFLICT => 表明该文件有冲突,被至少2人修改。
- 解决
-
- 查看日志,去线下和对应修改人员沟通,确定如何修改。
- 切忌在协作开发时,随意修改或者删除他人代码
冲突示例,同步代码出现:CONFLICT
$ git pull remote: Enumerating objects: 5, done. remote: Counting objects: 100% (5/5), done. remote: Compressing objects: 100% (3/3), done. remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 0 Unpacking objects: 100% (3/3), 432 bytes | 43.00 KiB/s, done. From gitee.com:liuzhenyu666/test0130 7b3e8f6..5484e31 master -> origin/master Auto-merging HelloWorld.java CONFLICT (content): Merge conflict in HelloWorld.java Automatic merge failed; fix conflicts and then commit the result.
<<<<<<< HEAD System.out.println("Hello World666"); System.out.println("Hello World6661234565"); =======================================分界线,以上是自己的代码,以下是别人的代码 System.out.println("Hello World6asd6688888"); int c = 0; System.out.println(c); >>>>>>> 5484e31669c498dadd814067524b3efe7a4a9ebd
删除
从暂存区和工作区删除
git rm <file> git rm test.txt #删掉文件 #如果删除之前修改过并且已经放到暂存区域的话,则必须要用强制删除选项 -f git rm -f test.txt
从跟踪清单中删除
#如果想把文件从暂存区域移除,但仍然希望保留在当前工作目录中,换句话说,仅是从跟踪清单中删除,使用 --cached 选项即可: git rm --cached <file> git rm --cached test.txt git rm --cached -r .
忽略文件.gitignore
- 内容示例,忽略.idea、target文件夹和所有以iml为后缀的文件
/.idea/ /target/ *.iml
- 作用
-
- 第一次初始化项目时 忽略文件就配置成功了
- 其他人正常同步代码
- 已提交的文件如何恢复忽略
-
- git rm --cached 文件
- git rm --cached -r 文件夹
- git rm --cached -r .
- 后期调整忽略文件
-
- 调整完毕忽略文件
- 所有人都执行 : git rm --cached -r .
- 其中一个人执行
-
-
- git add .
- git commit -m 'init '
- git pull
- git push
-
-
- 其他所有人执行
-
-
- git pull
- 正常同步
-