Git教程学习记录如下:
集中式VS分布式:
集中式版本控制系统必须联网才可以工作的,版本库集中放在中央服务器上,工作的时候要从服务器上取得最新的版本,干完活后再推送到中央服务器上。
分布式版本控制系统在每个人的电脑上都有一个完整的版本库,因此工作的时候就不需要联网,并且安全性也很高,
SVN是Subversion的简称,是一个开放源代码的版本控制系统,相较于CVS,它采用了分支管理系统,他的设计目标就是取代CVS。
初始化一个仓库的命令如下:
$ git init
配置一个Git仓库的命令如下:
$ git config --global user.name “Your Name”
$ git config --global user.email email@example.com
仓库:repository
添加文件的命令:
$ git add filename
提交文件的命令如下:
$ git commit –m “information”
时刻掌握仓库的当前状态的命令如下:
$ git status
查看文件的不同的命令如下:
$ git diff
git status可以查看文件被修改过,git diff可以查看文件修改的内容。
查看历史提交的记录的命令如下:
$ git log
该命令显示从最近到最远的提交日志
如果显看的眼花缭乱我们可以添加如下的命令
$ git log –pretty=oneline
回退到上一个版本的命令如下:
$ git reset –hard HEAD^
回退后如何再返回原来的版本的命令如下:
$ git reset –hard 3156aa781e
用来记录操作的每一条命令的命令如下:
$ git reflog
小结:
(1)HEAD指向的版本就是当前的版本,因此Git允许我们在版本的历史之间穿梭,使用命令$ git reset –hard commit_id
(2)穿梭前可以使用$git log 查看提交历史,以确定要回退到那个版本
(3)要重返未来,使用$git reflog查看命令的历史记录,以确定要回退到历史的那个记录。
工作区和暂存区:
我们使用命令$git add 把文件添加进去,实际上就是吧文件修改添加到暂存区stage
我们使用命令$git commit提交更改,实际上就是把暂存区stage的所有内容提交到当前分支master
工作区中的文件.git里面含有许多的内容,其中最重要的就是stage的暂存区,还有Git为我们自动创建的分支master,以及指向master的一个分支HEAD。
Git管理的是修改而不是文件
查看工作区和版本库里面的最新版本的区别的命令如下:
$ git diff HEAD -- readme.txt
如果每次修改不使用git add 命令添加到暂存区stage,那就不会加入到commit中。
git diff:是查看working tree与index file的差别的。
git diff--cached:是查看indexfile与commit的差别的。
git diffHEAD:是查看working tree和commit的差别的。(你一定没有忘记,HEAD代表的是最近的一次commit的信息)
撤销修改命令如下:
$gitcheckout – readme.txt
该命令的作用就是把文件readme.txt在工作区中的修改全部撤销,分两种情况:
(1)一种就是readme.txt自修改后还没有放到暂存区,现在撤销后就回到和版本库一模一样的状态
(2)一种就是readme.txt已经添加到暂存区stage后,又做了修改,现在撤销后就回到添加暂存区后的状态。
总之就是让这个文件回到最近一次git commit或 git add时的状态。
使用如下命令可以把暂存区的修改撤销掉
$git reset HEAD file
Git reset命令既可以回退版本,也可以把暂存区的修改会退到工作区,当我们使用HEAD时,表示最新的版本。
小结:
(1)当你改乱了工作区的某个文件的内容时,想直接丢掉工作区的修改的时候,用命令git checkout – file。
(2)当你不但该乱了工作区的某个文件的内容,还添加到了工作区中,分两步,第一步用命令git reset HEAD file,就回到了场景1,第二部按照场景1的操作。
(3)已经提交了不适合的修改到版本库的时候,想要撤销本次提交,前提没有推送到远程库,使用命令如下:git reset –hard HEAD
删除文件
如果是误删除的文件,由于版本库里面还有文件,所以可以很轻松的把误删除的文件恢复到最新版本。
$ git checkout – filename
小结:
工作目录,stage,master是三种状态,工作目录到stage,使用git add/rm, stage到master,使用git commit,回退的话借助提示信息就ok。
因为GitHub需要识别出你推送的提交确实是你推送的,而不是别人冒充的,而Git支持SSH协议,所以,GitHub只要知道了你的公钥,就可以确认只有你自己才能推送。
添加远程库:
在第一次向远程仓库提交代码的时候的命令如下:
$ git push –u origin master
Git不但会把本地的master分支内容推送到远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取的时候就可简化命令。
把本地master分支的最新修改推送至GitHub的命令如下:
$ git push origin master
小结:
关联一个远程仓库,使用如下的命令:
$ git remote add origin git @server-name:path/repo-name.git
关联后,使用命令git push –u origin master第一次推送master分支的所有内容
此后再次提交使用命令:
$ git push origin master 推送最新修改
分布式版本系统的最大好处就是在本地工作完全不需要考虑远程仓库的存在,也就是没有联网都可以正常工作,而SVN在没有联网的时候是拒绝干活的!当有网络的时候,再把本地提交推送一下就完成了同步。
从远程库克隆:
https://github.com/wanglaiqi/gitskills.git
git@github.com:wanglaiqi/gitskills.git
要克隆一个仓库,首先必须知道仓库的地址,然后使用git clone命令克隆
Git支持多种协议,包括https,但通过ssh支持原生git协议速度最快
小结
查看分支的命令:git branch
创建分支的命令:git branch <name>
切换分支的命令:git checkout <name>
创建+切换分支的命令:git checkout –b <name>
合并某分支到当前分支的命令:git merge <name>
删除分支的命令:git branch –d <name>
查看分支合并图的命令:git log --graph
小结:
查看远程库信息,使用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的基本概念,包括集中式与分布式版本控制系统的特点,Git常用命令及其应用场景,如初始化仓库、配置用户信息、添加及提交文件等。同时,文章详细解释了如何管理版本历史、撤销修改、处理文件删除及远程仓库的同步。

2228

被折叠的 条评论
为什么被折叠?



