跟着这个教程:https://git-scm.com/book/zh/v1/
也参照了:https://www.jianshu.com/p/08b7048ec925
【0】命令行
git init 把当前的目录变成可以管理的git仓库,生成隐藏.git文件。
git add XX 把xx文件添加到暂存区去。
git commit –m “XX” 提交文件 –m 后面的是注释。
git status 查看仓库状态
git diff XX 查看XX文件修改了那些内容
git log 查看历史记录
git reset –hard HEAD^ 或者 git reset –hard HEAD~ 回退到上一个版本(如果想回退到100个版本,使用git reset –hard HEAD~100 )
cat XX 查看XX文件内容
git reflog 查看历史记录的版本号id
git checkout — XX 把XX文件在工作区的修改全部撤销。
git rm XX 删除XX文件
git remote add origin https://github.com/tugenhua0707/testgit 关联一个远程库
git push –u(第一次要用-u 以后不需要) origin master 把当前master分支推送到远程库
git clone https://github.com/tugenhua0707/testgit 从远程库中克隆
git checkout –b dev 创建dev分支 并切换到dev分支上
git branch 查看当前所有的分支
git checkout master 切换回master分支
git merge dev 在当前的分支上合并dev分支
git branch –d dev 删除dev分支
git branch name 创建分支
git stash 把当前的工作隐藏起来 等以后恢复现场后继续工作
git stash list 查看所有被隐藏的文件列表
git stash apply 恢复被隐藏的文件,但是内容不删除
git stash drop 删除文件
git stash pop 恢复文件的同时 也删除文件
git remote 查看远程库的信息
git remote –v 查看远程库的详细信息
git push origin master Git会把master分支推送到远程库对应的远程分支上
作者:温温温888
链接:https://www.jianshu.com/p/08b7048ec925
來源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。
【1】基础操作
添加推送:
git init 把当前的目录变成可以管理的git仓库,生成隐藏.git文件。
git add XX 把xx文件添加到暂存区去。
git commit –m “XX” 提交文件 –m 后面的是注释。
git push –u(第一次要用-u 以后不需要) origin master 把当前master分支推送到远程库
撤销操作:
- 修改最后一次提交,如果刚才提交时忘了暂存某些修改,可以先补上暂存操作,然后再运行 –amend 提交:
$ git commit -m 'initial commit'
$ git add forgotten_file
$ git commit --amend
- 取消已经暂存的文件(已经add):
git reset –hard HEAD^ 或者 git reset –hard HEAD~ 回退到上一个版本(如果想回退到100个版本,使用git reset –hard HEAD~100 )
- 取消对文件的修改,回到之前的版本。你可能已经意识到了,这条命令有些危险,所有对文件的修改都没有了,因为我们刚刚把之前版本的文件复制过来重写了此文件。所以在用这条命令前,请务必确定真的不再需要保留刚才的修改。如果只是想回退版本,同时保留刚才的修改以便将来继续工作,可以用下章介绍的 stashing 和分支来处理,应该会更好些
git checkout -- file 把XX文件在工作区的修改全部撤销。
远程仓库
#查看当前的远程库
git clone url
git remote 查看远程库的信息
git remote –v 查看远程库的详细信息
#添加/关联远程仓库
git remote add origin https://github.com/tugenhua0707/testgit
#从远程仓库抓取数据
git fetch [remote-name]
#推送到远程库对应的远程分支上
git push origin master
#查看远程仓库信息
git remote show origin
#远程仓库重命名:修改远程仓库在本地的简称
git remote rename pb paul
#远程仓库删除
git remote rm
打标签
https://git-scm.com/book/zh/v1/Git-%E5%9F%BA%E7%A1%80-%E6%89%93%E6%A0%87%E7%AD%BE
小技巧
自动补全功能,别名命名功能
【2】分支功能
创建,合并,删除
git branch testing #创建
git checkout testing #切换
git checkout -b iss53 #新建并切换,等于上面两个加起来
git merge hotfix #合并分支和之前的主分支master
git branch -d hotfix #删除这个完成历史使命的分支
#如果两个分支对同一个部分都进行了改变,合并遇到冲突
#Git 作了合并,但没有提交,它会停下来等你解决冲突。要看看哪些文件在合并时发生冲突,可以用 git status 查阅:
#任何包含未解决冲突的文件都会以未合并(unmerged)的状态列出。Git 会在有冲突的文件里加入标准的冲突解决标记,可以通过它们来手工定位并解决这些冲突。可以看到此文件包含类似下面这样的部分:
分支的管理
git branch 命令不仅仅能创建和删除分支,如果不加任何参数,它会给出当前所有分支的清单:
git branch --merged #查看哪些分支已经被并入当前分支
git branch --no --merged #查看尚未合并的工作
例子:利用分支进行开发的工作流程
许多使用 Git 的开发者都喜欢用这种方式来开展工作,比如仅在 master 分支中保留完全稳定的代码,即已经发布或即将发布的代码。与此同时,他们还有一个名为 develop 或 next 的平行分支,专门用于后续的开发,或仅用于稳定性测试 — 当然并不是说一定要绝对稳定,不过一旦进入某种稳定状态,便可以把它合并到 master 里。这样,在确保这些已完成的特性分支(短期分支,比如之前的 iss53 分支)能够通过所有测试,并且不会引入更多错误之后,就可以并到主干分支中,等待下一次的发布。
本质上我们刚才谈论的,是随着提交对象不断右移的指针。稳定分支的指针总是在提交历史中落后一大截,而前沿分支总是比较靠前(见图 3-18)。稳定版本一般比较老旧。
在任何规模的项目中都可以使用特性(Topic)分支。一个特性分支是指一个短期的,用来实现单一特性或与其相关工作的分支。可能你在以前的版本控制系统里从未做过类似这样的事情,因为通常创建与合并分支消耗太大。然而在 Git 中,一天之内建立、使用、合并再删除多个分支是常见的事。
远程分支
(远程仓库名)/(分支名)来表示远程分支
git fetch origin #来同步远程服务器上的数据到本地
git push (远程仓库名) (分支名) #推送一起开发
git merge origin/serverfix #合并
git checkout -b serverfix origin/serverfix #如果想要一份自己的 serverfix 来开发,可以在远程分支的基础上分化出一个新的分支来:
git checkout -b [分支名] [远程名]/[分支名] #跟踪切换
git checkout -b sf origin/serverfix
git push origin :serverfix #删除远程分支,很无语的语法
变基rebase:将一个分叉的改动在另一个里面上演一遍
变基的风险,要遵守:
一旦分支中的提交对象发布到公共仓库,就千万不要对该分支进行变基操作。如果你遵循这条金科玉律,就不会出差错。否则,人民群众会仇恨你,你的朋友和家人也会嘲笑你,唾弃你。(lol)
$ git checkout experiment
$ git rebase master
【3】分布式
集成管理worlflow
项目维护者可以推送数据到公共仓库 blessed repository。
贡献者克隆此仓库,修订或编写新代码。
贡献者推送数据到自己的公共仓库 developer public。
贡献者给维护者发送邮件,请求拉取自己的最新修订。
维护者在自己本地的 integration manger 仓库中,将贡献者的仓库加为远程仓库,合并更新并做测试。
维护者将合并后的更新推送到主仓库 blessed repository。
提交指南
- git diff –check 先运行,列出来多余空白字符
- 请将每次提交限定于完成一次逻辑功能。并且可能的话,适当地分解为多次小更新,以便每次小型提交都更易于理解。请不要在周末穷追猛打一次性解决五个问题,而最后拖到周一再提交。
- 提交说明的撰写。写得好可以让大家协作起来更轻松。一般来说,提交说明最好限制在一行以内,50 个字符以下,简明扼要地描述更新内容,空开一行后,再展开详细注解。
- 这里提供了小的团队,大的团队,公开项目的例子。https://git-scm.com/book/zh/v1/%E5%88%86%E5%B8%83%E5%BC%8F-Git-%E4%B8%BA%E9%A1%B9%E7%9B%AE%E4%BD%9C%E8%B4%A1%E7%8C%AE
项目管理
- 在特性分支上面集成新的代码
- 来自email,使用git apply或者git am
- 检出远程分支
- 决断代码取舍
- 代码集成
- 发行版签名
- 内部版本号
- 准备发布
- 制作简报