Git学习总结

相关学习链接:

Git官网:https://git-scm.com/

廖雪峰的官方网站Git总结

 

Git和GitHub的关系?

Git是一个分布式的版本控制系统。

GitHub是一个基于Git做版本控制的代码托管平台。类似的还有BitBucket

 

需要下载 Git for windows 软件,在官网下载,速度特别慢,

MINGW32 / MINGW64

提示: 可以考虑去这个网站下载,速度很快。 gitb.org


在介绍命令前,需要了解点其他的几个常用命令:

cd "<path>"  直接进入到这个路径,git中 Shift + Ins 可以复制(复制的快捷键)

cd ..  退回上一层路径

pwd  打印出当前工作路径

cd ~  进入到用户的路径

ls   罗列出当前路径下的文件

ls -ah  罗列出当前路径下的文件,包括隐藏文件

cat <file>  显示该文件内容

 

比较重要的命令:有三种方式可以找到Git的帮助手册

$ git help <verb>
$ git <verb> --help
$ man git-<verb>

例如:获取config命令的手册

git help config

 

常用命令:

git init  初始化git仓库。先进入到要初始化的仓库的文件夹,再执行此命令

git add <file>  添加文件到版本库。注意,可反复多次使用,添加多个文件(用空格相隔

git commit -m "comments"  提交文件到仓库。双引号中,写提交说明,即log

git status  查看当前仓库状态,是否有修改等

git diff <file>  查看该文件difference

git log  查看提交记录,显示log,从最今到最远

git log --pretty=oneline  加上该参数,简化log,每次提交只显示一行。 前面一串是 commit id(版本号) ,SHA1计算出来

git reset --hard <commit_id>  回退到某个版本

  首先,Git必须知道当前版本是哪个版本,在Git中,用HEAD表示当前版本,也就是最新的提交,上一个版本就是HEAD^,上上一个版本就是HEAD^^,当然往上100个版本写100个^比较容易数不过来,所以写成HEAD~100。

git reflog  用来记录每一次命令,查看命令历史,用于确定要回到未来的哪一个版本

git diff HEAD -- <file>  命令可以查看工作区和版本库里面最新版本的区别

git checkout  其实是用版本库里的版本替换工作区的版本,无论工作区是修改还是删除,都可以“一键还原”

git checkout -- <file>  当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时

git reset HEAD <file>  当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,先用此命令,然后再用上面的命令。

rm <file>  直接把文件删除掉

git rm <file>  确实要从版本库中删除该文件,也可以删除文件夹

git rm -r <folder/>  此处-r表示递归所有子目录,如果你要删除的是空的文件夹,可以不同加-r

 

 

远程仓库:

创建SSH Key

ssh-keygen -t rsa -C "youremail@example.com"  

  如果一切顺利的话,可以在用户主目录里找到.ssh目录,里面有id_rsaid_rsa.pub两个文件,这两个就是SSH Key的秘钥对,id_rsa是私钥,不能泄露出去,id_rsa.pub是公钥,可以放心地告诉任何人。

为什么GitHub需要SSH Key呢?

  因为GitHub需要识别出你推送的提交确实是你推送的,而不是别人冒充的,而Git支持SSH协议,所以,GitHub只要知道了你的公钥,就可以确认只有你自己才能推送。当然,GitHub允许你添加多个Key

 

git remote add origin <remote git repository url>  将本地仓库与远程仓库关联

  添加后,远程库的名字就是origin,这是Git默认的叫法,也可以改成别的,但是origin这个名字一看就知道是远程库

git push -u origin master

  把本地库的内容推送到远程,用git push命令,实际上是把当前分支master推送到远程。

  由于远程库是空的,我们第一次推送master分支时,加上了-u参数,Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令。

git push origin master

  把本地master分支的最新修改推送至远程仓库

 

git clone <remote git repository url> <自定义本地仓库的名字,这里可以省略不写>

  克隆一个远程仓库

 

git remote  列出所有远程主机

git remote -v  查看git远程控制,可以查看远程主机的网址

git remote remove origin  删除和远程的关联

 

git config --get remote.origin.url  查看远程仓库地址

git config -l  查看当前git环境详细配置

git config --list  和上面的是一样的效果。

git config <key>  检查Git的某一项设置。使用上面查出来的key。

git config --system --list  查看系统配置

git config --global --list  查看当前用户global配置

 

git branch -a  列出所有分支的详细信息,包括远程分支,用红色标注

git branch <branchName>  新建分支

git checkout <branchName>  切换到该分支,并开始开发

git checkout -b <branchName>  新建一个分支,并同时切换到那个分支(是上面两条语句的简写

git branch -D <branchName>  删除本地分支

 

之前也使用过Source Tree,它上面有一个功能,叫做git flow,点完后,可以新建一个Hotfix分支,  如 Hotfix/issueNo

这个和使用命令行创建是一样的效果: git checkout -b Hotfix/issueNo

 

git pull 操作就可以从远程库中获取某个分支的更新,再与本地指定的分支进行自动merge(即使本地不存在这个分支)
  git pull <远程库名> <远程分支名>:<本地分支名>

如果是要与本地当前分支merge,则冒号后面的<本地分支名>可以不写
  git pull <远程库名> <远程分支名>

推送本地分支到远程仓库
  git push --set-upstream origin <本地分支名>

从远程仓库里拉取一条本地不存在的分支
  git checkout -b <本地分支名> origin/<远程分支名>

  如果出现提示:
  fatal: Cannot update paths and switch to branch 'dev2' at the same time.
  Did you intend to checkout 'origin/dev2' which can not be resolved as commit?
  表示拉取不成功。上面的我需要先执行
  git fetch
  然后再执行
  git checkout -b <本地分支名> origin/<远程分支名>

直接 git pull origin <远程分支名>:<本地分支名>  一个命令可以达到同等效果

 

posted @ 2017-05-04 21:34  无涯的风  阅读(215)  评论(0编辑  收藏  举报