目录
Git(全称是分布式版本控制系统)的功能特性
Git与SVN的区别
Git的使用方法
Git相关配置
Git相关命令
1.初始化本地仓库
2.添加仓库文件
4.查看修改内容,查看文件不同
5.Git 回退版本
6.删除工作区文件
7.移动或重命名工作区文件
8.管理分支
9.Git 标签
Git 远程仓库(Github)
从远程仓库克隆
添加远程库
提取远程仓库
推送到远程仓库
删除远程仓库
1、从服务器上克隆完整的Git仓库(包括代码和版本信息)到单机上。
2、在自己的机器上根据不同的开发目的,创建分支,修改代码。
3、在单机上自己创建的分支上提交代码。
4、在单机上合并分支。
5、把服务器上最新版的代码fetch下来,然后跟自己的主分支合并。
6、生成补丁(patch),把补丁发送给主开发者。
7、看主开发者的反馈,如果主开发者发现两个一般开发者之间有冲突(他们之间可以合作解决的冲突),就会要求他们先解决冲突,然后再由其中一个人提交。如果主开发者可以自己解决,或者没有冲突,就通过。
8、一般开发者之间解决冲突的方法,开发者之间可以使用pull 命令解决冲突,解决完冲突之后再向主开发者提交补丁。
两者都是版本控制器,不过Git是分布式的,SVN是集中式的。
因为 Git 是分布式的,所以 Git 支持离线工作,在本地可以进行很多操作,包括接下来将要重磅推出的分支功能。而 SVN 必须联网才能正常工作。、
Git复杂概念多,SVN简单易上手
Git分支廉价,SVN分支昂贵
Git 下载地址:https://git-scm.com/downloads
安装时全部选择Next就可以
安装好后鼠标右键选择Git Bash Here启动Git命令行界面,后面讲到的所有指令都将在Git Bash中运行。
git config 命令的 --global 参数,用了这个参数,表示你这台机器上所有的 Git 仓库都会使用这个配置,当然也可以对某个仓库指定不同的用户名和Email地址(不加 --global)。
可以使用 git config --list 检查已有的配置信息。
拉取远程分支代码时,后面要加对应的分支名
Git的工作就是创建和保存你项目的快照及与之后的快照进行对比
Git 常用的是以下 6 个命令:git clone、git push、git add 、git commit、git checkout、git pull。
git add可以将本地的文件上传到缓存区
git commit将缓存区的文件上传到本地的仓库或版本库
git push将本地仓库的文件上传到远程仓库
workspace工作区,本地的;staging area暂存区,缓存区;local repository版本库,本地仓库;remote repository远程仓库
cd 改变目录
mkdir 创建目录
pwd 用于显示当前目录
git init 把当前目录初始化为 git 仓库
ls -ah 查看当前目录下的文件,包含隐藏文件 (不带 -ah 看不了隐藏文件)
先在之前创建的本地文件夹learngit中新建README文件,test1.c文件,test2.c文件,test3.c文件。
命令git status -s 查看仓库状态:??表示未上传的文件,A表示上传到缓存区的文件,AM表示本地的和缓存区的文件内容不一样
使用 "git add ." 命令来添加当前项目的所有文件。
只添加一个的话就可以:git add README
使用“git add *.c”可以添加后缀名为.c的所有文件
修改README文件后再次查看状态;AM 状态的意思是这个文件在我们将它添加到缓存之后又有改动。改动后我们再执行 git add . 命令将其添加到缓存中,
使用 git add
使用 git commit -m "description" 提交该文件到仓库, description 为对该次提交的描述说明
使用 git status 查看仓库目前状态 (项目是否有修改、添加、未追踪的文件等)
git diff 查看工作区(work dict)和暂存区(stage)的区别
git diff --cached 查看暂存区(stage)和分支(master)的区别
git diff HEAD --
如: git diff hello.txt 表示查看 hello.txt 修改了什么,有什么不同
git reset 命令用于回退版本,可以指定退回某一次提交的版本。
格式如下: git reset [--soft | --mixed | --hard] [HEAD]
--mixed 为默认,可以不用带该参数,用于重置暂存区的文件与上一次的提交(commit)保持一致,工作区文件内容保持不变。
例如:
$ git reset HEAD^ # 回退所有内容到上一个版本
$ git reset HEAD^ hello.php # 回退 hello.php 文件的版本到上一个版本
其余参数:
--soft 参数用于回退到某个版本:
实例: $ git reset --soft HEAD~3 # 回退上上上一个版本
--hard 参数撤销工作区中所有未提交的修改内容,将暂存区与工作区都回到上一次版本,并删除之前的所有信息提交:
实例:
$ git reset –hard HEAD~3 # 回退上上上一个版本
$ git reset –hard bae128 # 回退到某个版本回退点之前的所有信息。
$ git reset --hard origin/master # 将本地的状态回退到和远程的一样
注意:谨慎使用 –hard 参数,它会删除回退点之前的所有信息。
git reset HEAD 命令用于取消已缓存的内容。 现在两个文件修改后,都提交到了缓存区:
我们现在要取消其中一个的缓存,指令: $ git reset HEAD README
之后再执行 git commit,
只会将 test1.c 文件的改动提交,而 README 没有。
可以看到 README 文件的修改并未提交。 这时我们可以使用以下命令将 hello.php 的修改提交
git rm 命令用于删除文件。
git rm 删除文件有以下几种形式:
1. 将文件从暂存区和工作区中删除: $ git rm
2. 如果删除之前修改过并且已经放到暂存区域的话,则必须要用强制删除选项 -f。
3. 如果想把文件从暂存区域移除,但仍然希望保留在当前工作目录中,换句话说,仅是从跟踪清单中删除,使用 --cached 选项即可
git mv 命令用于移动或重命名一个文件、目录或软连接。
$ git mv [file] [newfile]
如果新但文件名已经存在,但还是要重命名它,可以使用 -f 参数:
$ git mv -f [file] [newfile]
我们可以添加一个 README 文件(如果没有的话),然后对其重命名
$ git branch # 列出所有本地分支
$ git branch -a # 列出所有本地分支和远程分支
$ git branch [branch-name] # 新建一个分支,但依然停留在当前分支
$ git checkout -b [new_branch] [remote-branch] # 新建一个分支,并切换到该分支
$ git checkout [branch-name] # 切换到指定分支,并更新工作区
$ git merge [branch] # 合并指定分支到当前分支
$ git cherry-pick [commit] # 选择一个 commit,合并进当前分支
$ git branch -d [branch-name] # 删除本地分支,-D 参数强制删除分支
$ git push [remote] :[remote-branch] # 删除远程分支
如果我们要手动创建一个分支。执行 git branch (branchname) 即可。
也可以使用 git checkout -b (branchname) 命令来创建新分支并立即切换到该分支下,从而在该分支中操作。
删除分支命令: $ git branch -d (branchname)
$ git merge 命令将任何分支合并到当前分支中去,合并并不仅仅是简单的文件添加、移除的操作,Git 也会合并修改
Git vim使用详解:https://blog.csdn.net/zym18351887819/article/details/80468525
如果项目达到一个重要的阶段,并希望永远记住那个特别的提交快照,可以使用 git tag 给它打上标签。 比如说,我们想为我们的 learngit 项目发布一个"1.0"版本
当你执行 git tag -a 命令时,Git 会打开你的编辑器,让你写一句标签注解,就像你给提交写注解一样。
执行 git log --decorate 时,我们可以看到我们的标签了:
Git 并不像 SVN 那样有个中心服务器。
目前我们使用到的 Git 命令都是在本地执行,如果你想通过 Git 分享你的代码或者与其他开发人员合作。 你就需要将数据放到一台其他开发人员能够连接的服务器上。
这里,我们使用了 Github 作为远程仓库。
我们使用 git clone 从现有 Git 仓库中拷贝项目(类似 svn checkout)。
克隆仓库的命令格式为:git clone
其中repo表示Git 仓库,directory代表本地目录,比如,要克隆 Ruby 语言的 Git 代码仓库 Grit,可以用下面的命令:
git clone git://github.com/schacon/grit.git mygrit
以 Github 为例作为远程仓库。由于本地 Git 仓库和 GitHub 仓库之间的传输是通过SSH加密的,所以我们需要配置验证信息,使用以下命令生成 SSH Key:
$ ssh-keygen -t rsa -C "[email protected]"
后面的 [email protected] 改为你在 Github 上注册的邮箱,之后会要求确认路径和输入密码,我们这使用默认的一路回车就行。
成功的话会在 ~/ 下生成 .ssh 文件夹,进去,打开 id_rsa.pub,复制里面的 key
回到 github 上,进入 Account=>Setting=>SSH and GPG keys=>New SSH key,在key处填入 id_rsa.pub 中的内容,新建SSH key,成功结果如图:
为了验证是否成功,输入以下命令:$ ssh -T [email protected],结果如图:
之后登录后点击" New repository " 如下图所示:之后在在Repository name 填入 runoob-git-test(远程仓库名) ,其他保持默认设置,点击"Create repository"按钮,就成功地创建了一个新的Git仓库:以上信息告诉我们可以从这个仓库克隆出新的仓库,也可以把本地仓库的内容推送到GitHub仓库。
现在,我们根据 GitHub 的提示,在本地的仓库下运行命令(方框中内容为用户名/远程仓库名):
然后输入 $ git push -u origin master,现在刷新github,就可以看到我们提交的内容了。
查看当前的远程库:$ git remote # 查看当前配置有哪些远程仓库
$ git remote -v # 查看每个别名的实际链接地址
提取远程仓库:$ git fetch # 从远程仓库下载新分支与数据:
$ git merge # 从远端仓库提取数据并尝试合并到当前分支
假设你配置好了一个远程仓库,并且你想要提取更新的数据,你可以首先执行 git fetch [alias] 告诉 Git 去获取它有你没有的数据,然后你可以执行 git merge [alias]/[branch] 以将服务器上的任何更新(假设有人这时候推送到服务器了)合并到你的当前分支。
在github上修改其中一个文件,提交后,在Git中输入$ git fetch origin,结果如图:
方框中的信息" 8e510f3..4ae2b8b master -> origin/master" 说明 master 分支已被更新,我们可以使用以下命令 $ git merge origin/master 将更新同步到本地:
查看本地文件,发现test2.c已经被修改。
推送你的新分支与数据到某个远端仓库命令:$ git push [alias] [branch]
以上命令将你的 [branch] 分支推送成为 [alias] 远程仓库上的 [branch] 分支,实例如下
重新回到我们的 Github 仓库,可以看到文件已经提交上来了。
删除远程仓库你可以使用命令:$ git remote rm [别名]
具体实例如下: