猴子都能懂的git
https://backlog.com/git-tutorial/cn/
git和SVN的简单对比
SVN必须联网才能正常工作,git支持本地版本控制工作
分布式和集中式的最大区别在于:在分布式下
开发者可以本地提交
每个开发者机器上都有一个服务器的数据库
git的工作原理,
工作区(Working Directory):仓库文件夹里除.git目录以外的内容
版本库(Repository):.git目录,用于存储记录版本信息
暂缓区(stage)
分支(master):git自动创建的第一个分支
HEAD指针:用于指向当前分支
git add :把文件修改添加到暂存区
git commit :把暂存区的所有内容提交到当前分支
SourceTree
下载地址:http://www.sourcetreeapp.com/download
git常用指令
git help :git指令帮助手册
查看其他指令的做法:git help 其他指令
git init : 初始化本地仓库
git config :git的配置信息相关(修改的是.git/config文件)
配置用户名:git config user.name 用户名(用于跟踪修改记录)
配置邮箱:git config user.email 邮箱(用于多人开发间的沟通)
查看配置信息:git config –l
编辑配置信息:git config –e(用vim编辑,:wq是退出vim编辑器)
设置指令的别名:git config alias.别名 原指令名称
设置带参数指令的别名:git config alias.别名 “原指令名称 参数”
将此设置应用到整个系统中:git config ––gloabal
----
git status :查文件的状态
查看某个文件的状态:git status 文件名
查看当前路径所有文件的状态:git status
git log :查看文件的修改日志
查看某个文件的修改日志:git log 文件名
查看当前路径所有文件的修改日志:git log
用一行的方式查看简单的日志信息:git log ––pretty=oneline
查看最近的N次修改:git log –N(N是一个整数)
git reflog 简单log
git diff :查看文件最新改动的地方
查看某个文件的最新改动的地方:git diff 文件名
查看当前路径所有文件最新改动的地方:git diff
------------
git init :初始化一个空的本地仓库,生成一个.git目录,用于维护版本信息
在当前路径初始化仓库:git init
在其他路径初始化仓库:git init 仓库路径
git add :将工作区的文件保存到暂缓区
保存某个文件:git add 文件名
保存所有文件:git add .
git commit :将暂缓区的文件提交到当前分支
提交某个文件到分支:git commit -m ”注释” 文件名
保存当前路径的所有文件到分支:git commit -m ”注释”
------------
git reset :版本回退(建议加上––hard参数,git支持无限次后悔)
回退到上一个版本:git reset ––hard HEAD^
回退到上上一个版本:git reset ––hard HEAD^^
回退到上N个版本:git reset ––hard HEAD~N(N是一个整数)
回退到任意一个版本:git reset ––hard 版本号(版本号用7位即可)
git rm:删除文件(删完之后要进行commit操作,才能同步到版本库)
------------
git clone:下载远程仓库到本地
下载远程仓库到当前路径:git clone 仓库的URL
下载远程仓库到特定路径:git clone 仓库的URL 存放仓库的路径
git pull:下载远程仓库的最新信息到本地仓库
git push:将本地的仓库信息推送到远程仓库
5. 备注补充
文件状态(git status)
> 颜色含义
红色: 代表被添加或者修改的文件没有被添加到暂缓区
绿色: 代表文件在暂缓区,等待提交
> 版本号的含义
版本号是一个由SHA1生成的40位哈希值
这样做的目的是保证版本号的唯一
日志查看配置, 命令如下:
git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)\<%an\>%Creset' --abbrev-commit"
Git版本备份/分支管理
git tag -a v1.0 -m “标记1.0版本”
git push origin v1.0
touch main.c 创建main.c文件
git 直接打标签, 通过控制head指向,来回到任一版本
> 进入文件夹后,初始化共享库
git init ——bare
> 进入文件夹后
git clone 共享库绝对路径
> 进入工作区,配置姓名,邮箱
git config user.name “manager”
git config user.email “[email protected]”
> 给此版本打标签,并将标签上传到共享库
git tag -a v1.0 -m “标记1.0版本”
git push origin v1.0
———至此,分支修复bug结束,下面合并分支———
从共享库更新代码到本地库
git pull
查看当前服务器都有哪些分支
git branch -r
切换到master分支后,将v1.0fixbug分支合并过来
git checkout master
git merge origin/v1.0fixbug -m “合并分支”
合并完成后提交到共享库
git add .
git commit -m “合并分支”
git push
合并完成后,可以删除共享库的分支
git branch -r -d origin/v1.0fixbug
查看版本标签,至此结束!!
git tag
git push 只能提交代码,不能连同标记一起提交
git push origin v1.0 提交标签
tag指向一次commit的id,通常用来给开发分支做一个标记
查看标签 : git tag
查看某两次tag之间的commit:git log --pretty=oneline tagA..tagB
查看某次tag之后的commit: git log --pretty=oneline tagA..
5.常用命令
git show # 显示某次提交的内容 git show $id
git add # 将工作文件修改提交到本地暂存区
git rm # 从版本库中删除文件
git reset # 从暂存区恢复到工作文件
git reset HEAD^ # 恢复最近一次提交过的状态,即放弃上次提交后的所有本次修改
git diff # 比较当前文件和暂存区文件差异 git diff
git log -p # 查看每次详细修改内容的diff
git branch -r # 查看远程分支
git merge # 将branch分支合并到当前分支
git stash # 暂存
git stash pop #恢复最近一次的暂存
git pull # 抓取远程仓库所有分支更新并合并到本地
git push origin master # 将本地主分支推到远程主分支
分支的使用
一、查看有多少个分支?
1.git branch 可以查看当前版本库中有多少个分支
1.如果当前的版本库是空的, 那么无法查看
2.分支前面有*号代表当前的HEADER指针指向哪一个分支, 我们提交的代码就会提交到指向的分支中
二、如何创建一个分支
git branch 分支名称 来创建一个新的分支
在哪个分支中创建了新的分支, 那么创建出来的新的分支就会继承当前分支的所有状态
例如:
在master分支中做了两个操作, 然后在master分支中创建了Dev分支
那么创建出来的Dev分支就会继承master分支中的这两个操作
注意点:
一旦分支被创建出来之后, 分支就是独立的, 分支之间不会相互影响
三、切换分支?
1.通过git switch 分支名称 来修改HEADER指针的指向
注意点: 只要HEADER指针的指向发生了改变, 那么commit的代码就会发生改变
HEADER指针指向谁commit提交的代码就提交到谁里面
四、如何将分支提交到远程服务器
1.通过git branch -r 来查看远程服务器上有多少个分支
2.首先需要在本地切换到新建的分支中, 然后通过git push指令提交新建的分支到远程的服务器
git push --set-upstream origin Dev
五、如何合并分支
可以通过 git merge 分支名称 来合并分支
例如:
在master分支中执行 git merge Dev 就代表需要将Dev分支中的代码都合并到master分支中
例如:
在Dev分支中执行 git merge master 就代表需要将master分支中的代码都合并到Dev分支中
六、如何删除分支
1.可以通过git branch -d 分支名称 来删除本地的分支
2.可以通过git push origin --delete 分支名称 来删除远程服务器的分支
1、
什么是“git cherry-pick”?
命令 git cherry-pick 通常用于把特定提交从存储仓库的一个分支引入到其他分支中。
常见的用途是从维护的分支到开发分支进行向前或回滚提交。
这与其他操作(例如:合并(merge)、变基(rebase))形成鲜明对比,
后者通常是把许多提交应用到其他分支中。
小结:git cherry-pick
2、
如何从 git 中删除文件,而不将其从文件系统中删除?
如果你在 git add 过程中误操作,你最终会添加不想提交的文件。
但是,git rm 则会把你的文件从你暂存区(索引)和文件系统(工作树)中删除,这可能不是你想要的。
上面意思是,git reset 是 git add 的逆操作。
3、
什么时候使用“git rebase”代替“git merge”?
这两个命令都是把修改从一个分支集成到另一个分支上,它们只是以非常不同的方式进行。
参考:
http://blog.jobbole.com/114297/
https://blog.csdn.net/pushiqiang/article/details/79068449
https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/001375840038939c291467cc7c747b1810aab2fb8863508000
命令模式:等待编辑命令输入;所有输入的内容都被当做命令来执行
插入模式:输入的所有内容都被显示,并被当做文件内容处理
命令行模式:执行待定命令(保存文件并退出vim : wq ; 强制退出不保存: q! )