学习GIT
来源:互联网 发布:无尽的传说2 mac 破解 编辑:程序博客网 时间:2024/06/11 04:40
工作以来一直使用git,日常使用ok,确实总结,今天记录一下。
1.创建库,完成一次提交:
$ mkdir learngit $ cd learngit $ git init$ git add file1.txt$ git add file2.txt file3.txt $ git commit -m "wrote a readme file"
2.查看当前工作区修改
场景1:有修改,但未提交
$ git status On branch master Changes not staged for commit: (use "git add <file>..." to update what will be committed) (use "git checkout -- <file>..." to discard changes in working directory)modified: readme.txt no changes added to commit (use "git add" and/or "git commit -a")
场景2:有修改,未已提交
$ git status On branch master Changes to be committed: (use "git reset HEAD <file>..." to unstage) modified: readme.txt此时可以查看修改内容$ git diff readme.txt diff --git a/readme.txt b/readme.txt index 46d49bf..9247db6 100644 --- a/readme.txt +++ b/readme.txt @@ -1,2 +1,2 @@ -Git is a version control system. +Git is a distributed version control system.
场景3:修改已提交
$ git status On branch master nothing to commit (working directory clean)
3.版本回退
查看版本提交历史 git log 查看简化历史列表 git log --pretty=oneline以图的方式查看 git log --graph --pretty=oneline
首先,Git必须知道当前版本是哪个版本,在Git中,用HEAD表示当前版本,也就是最新的提交3628164…882e1e0(注意我的提交ID和你的肯定不一样),上一个版本就是HEAD^,上上一个版本就是HEAD^^,当然往上100个版本写100个^比较容易数不过来,所以写成HEAD~100。
回退版本:$ git reset --hard HEAD^HEAD is now at ea34578 add distributed
reset只是head只是指向commmit,版本并没有删除。
查看head指向过的提交$ git reflogea34578 HEAD@{0}: reset: moving to HEAD^3628164 HEAD@{1}: commit: append GPLea34578 HEAD@{2}: commit: add distributedcb926e7 HEAD@{3}: commit (initial): wrote a readme file版本修改$ git reset --hard 3628164HEAD is now at 3628164 append GPL
git revert 是生成一个新的提交来撤销某次提交,此次提交之前的commit都会被保留
git reset 是回到某次提交,提交及之前的commit都会被保留,但是此次之后的修改都会被退回到暂存区
4.工作区与暂存区
工作区:系统目录
暂存区:.git下index保存修改
比较工作区与暂存区的比较:git diff
5.不知所以
git reset HEAD readme.txtgit checkout -- readme.txt
6.分支管理
查看分支:git branch 创建分支:git branch <name> 切换分支:git checkout <name> 创建+切换分支:git checkout -b <name> 合并某分支到当前分支:git merge <name> 删除分支:git branch -d <name> 暂存当前修改: git stash 恢复暂存:git stash list -> git stash pop 查看远程库信息: git remote -v
通常,合并分支时,如果可能,Git会用Fast forward模式,但这种模式下,删除分支后,会丢掉分支信息。
如果要强制禁用Fast forward模式,Git就会在merge时生成一个新的commit,这样,从分支历史上就可以看出分支信息。
$ git merge --no-ff -m "merge with no-ff" devMerge made by the 'recursive' strategy. readme.txt | 1 + 1 file changed, 1 insertion(+) 合并过程: $ git log --graph --pretty=oneline --abbrev-commit * 7825a50 merge with no-ff |\ | * 6224937 add merge |/ * 59bc1cb conflict fixed ...
7.多人协作
查看远程库信息,使用git remote -v;本地新建的分支如果不推送到远程,对其他人就是不可见的;从本地推送分支,使用git push origin branch-name,如果推送失败,先用git pull抓取远程的新提交;在本地创建和远程分支对应的分支,使用git checkout -b branch-name origin/branch-name,本地和远程分支的名称最好一致;建立本地分支和远程分支的关联,使用git branch --set-upstream branch-name origin/branch-name;从远程抓取分支,使用git pull,如果有冲突,要先处理冲突。使用git fetch只抓取内容
8.打出标签tag
命令git push origin <tagname>可以推送一个本地标签;命令git push origin --tags可以推送全部未推送过的本地标签;命令git tag -d <tagname>可以删除一个本地标签;命令git push origin :refs/tags/<tagname>可以删除一个远程标签。
9.开发模式集成场景:
分支开发模式:
1.开发创建:开发拉取各自的feature分支
2.集成合并:从主干拉取一个release分支,将所有要发布的开发分支合并release分支
3.构建部署:
4.写入基线:从release分支git tag出一个版本,作为发布版本
主干开发模式
1.主干分支:设定一个主干分支dev,
2.开发提交:所有dev都在上面提交代码
3.集成合并:从主干拉取release分支
3.构建部署:
4.写入基线:从release分支git tag出一个版本,作为发布版本
git-develop模式
1.开发创建:开发拉取各自的feature分支(集成目标:develop),合并到默认devlop分支
2.集成合并:从主干拉取release分支,合并develop分支
3.构建部署
4.写入基线:从release分支git tag出一个版本,作为发布版本
紧急修复:拉取bug分支(集成目标为master),使用master和bug分支和发布,然后合并会develop分支。
10.奇淫技巧
1.忽略git下的文件 2.配置命令别名 3.git cherry-pick 某次提交 4.git blame file 文件每行最近一次修改的版本和时间 详见大神网站
参考
廖雪峰的Git教程
gitHub上Git项目
- 【git】git学习笔记
- 【Git】Git学习手册
- Git学习 -- Git 安装
- Git学习-GIT安装
- 【Git学习】git常用命令
- git学习:git常用命令
- git 学习
- git 学习
- Git学习
- Git 学习
- GIT学习。
- git学习
- Git 学习
- git 学习
- Git学习
- Git学习
- git 学习
- git学习
- Java中按值传递问题
- 数据结构-二叉树(包含递归和非递归版本)
- Java中hashCode的作用
- python交互模式下退格键乱码问题
- Fn+W
- 学习GIT
- IOS开发学习笔记(四)
- 深度神经网络(DNN)模型与前向传播算法
- 29、文件操作--顺序文件的写操作
- 带图片的仿天猫导航栏
- JS 判断特殊字符
- 1 系统编程综述
- android6.0动态获取权限
- 动态规划之乘法游戏