git常用命令行总结
Git是当今最流行的版本控制工具。这几年GitHub也干掉了GoogleCode和Sourceforge,从三大代码仓库中脱颖而出,除了GitHub自身的优秀外,Git也是功不可没。
为何Git如此出众呢?这是因为Git保存的不是文件的变化或者差异,而是一系列不同时刻的文件快照,同时支持分支模型。Git处理分支的方式可谓是难以置信的轻量,创建新分支这一操作几乎能在瞬间完成,并且在不同分支之间的切换操作也是一样便捷。与许多其它版本控制系统不同,Git鼓励在工作流程中频繁地使用分支与合并,哪怕一天之内进行许多次。
这里,我简单地总结一了下Git的命令行命令
本地仓库操作
在现有目录中初始化仓库
如果你打算使用 Git 来对现有的项目进行管理,你只需要进入该项目目录并输入:
git init
该命令将创建一个名为.git的子目录,这个子目录含有你初始化的Git仓库中所有的必须文件,这些文件是Git仓库的骨干。
列出git的全部配置信息
git config --list
列出git的帮助命令
git help
状态简览
可以查看修改状态
git status
也可以使用git status -s命令或git status --short命令,你将得到一种更为紧凑的格式输出。
git status -s
实现对指定文件的跟踪,然后执行git commit暂存已修改文件
git add xxx git commit -m 'initial project version'
暂存已修改文件
Git可以暂存一个已跟踪文件的修改记录,其实只不过暂存了运行git add命令时的版本,如果现在提交,提交文件的版本是你最后一次运行git add命令时的那个版本,而不是运行git commit时,在工作目录中的当前版本。所以,运行了git add之后又作了修订的文件,需要重新运行git add把最新版本重新暂存起来
git add xxx git commit
移除文件
要从Git中移除某个文件,就必须要从已跟踪文件清单中移除(确切地说,是从暂存区域移除),然后提交。可以用git rm命令完成此项工作,并连带从工作目录中删除指定的文件,这样以后就不会出现在未跟踪文件清单中了。
移动文件
运行git mv就相当于运行了下面三条命令:
mv README.md README git rm README.md git add README
同时可以使用mv命令实现修改文件名称。不管是直接使用git mv还是使用上述三个操作,Git都会意识到这是一次改名,所以不管何种方式结果都一样。两者唯一的区别是,mv是一条命令而另一种方式需要三条命令,直接用git mv轻便得多。
查看已暂存和未暂存的修改
git diff命令让你知道当前做的哪些更新还没有暂存,同时也可以知道有哪些更新已经暂存起来准备好了下次提交。
git diff
提交修改
现在的暂存区域已经准备妥当可以提交了。在此之前,请一定要确认还有什么修改过的或新建的文件还没有git add过,否则提交的时候不会记录这些还没暂存起来的变化。
这些修改过的文件只保留在本地磁盘。所以,每次准备提交前,先用git status看下,是不是都已暂存起来了,然后再运行提交命令git commit
git commit
这种方式会启动文本编辑器以便输入本次提交的说明。会启用默认指定的软件编辑,可以按照,使用git config --global core.editor命令设定指定的编辑软件。
另外,你也可以在 commit 命令后添加 -m 选项,将提交信息与命令放在同一行
给git commit加上-a选项,Git 就会自动把所有已经跟踪过的文件暂存起来一并提交,从而跳过git add步骤
查看提交历史
在提交了若干更新,又或者克隆了某个项目之后,你也许想回顾下提交历史。完成这个任务最简单而又有效的工具是git log命令。
git log
撤销提交
在任何一个阶段,都有可能想要撤消某些操作,有些撤消操作是不可逆的。
有时候我们提交完了才发现漏掉了几个文件没有添加,或者提交信息写错了。此时,可以运行带有--amend选项的提交命令尝试重新提交
git commit -m 'initial commit' git add forgotten_file git commit --amend
最终你只会有一个提交 - 第二次提交将代替第一次提交的结果。
取消暂存的文件
已经修改了两个文件并且想要将它们作为两次独立的修改提交,但是却意外地输入了git add *暂存了它们两个。如何只取消暂存两个中的一个呢?
可以使用git reset HEAD撤销一次提交
Git 分支
几乎所有的版本控制系统都以某种形式支持分支。 使用分支意味着你可以把你的工作从开发主线上分离开来,以免影响开发主线。
Git保存的不是文件的变化或者差异,而是一系列不同时刻的文件快照。而所谓的Git分支,就是指向一个快照的指针。
分支创建
Git的默认分支名字是master。我们可以创建新的分支。比如,创建一个testing分支,只需要使用git branch命令:
git branch testing
同时有一个名为HEAD的特殊指针,指向当前分支。
查看所有分支
使用git branch命令可以查看所有分支,当前分支(HEAD指向的分支)前面会带有*
git branch * master testing
分支切换
要切换到一个已存在的分支,你需要使用 git checkout 命令。 我们现在切换到新创建的 testing 分支去:
git checkout testing
这样 HEAD 就指向 testing 分支了。
你可以在不同分支间不断地来回切换和工作,并在时机成熟时将它们合并起来。而所有这些工作,你需要的命令只有branch、checkout 和commit。
合并分支
git可以将当前分支合并回其他分支。可以使用git merge命令来达到上述目的:
git checkout merge git merge testing
变基
rebase(变基)命令将提交到某一分支上的所有修改都移至另一分支上,就好像“重新播放”一样。
简单来说:merge操作会生成一个新的节点,之前的提交分开显示。而rebase操作不会生成新的节点,是将两个分支融合成一个线性的提交。
git checkout merge git rebase testing
删除分支
可以使用带-d选项的git branch命令来删除分支:
git branch -d testing
远程仓库操作
为了能在任意Git项目上协作,你需要知道如何管理自己的远程仓库。远程仓库是指托管在因特网或其他网络中的你的项目的版本库。
一个项目可以有好几个远程仓库,通常有些仓库对你只读,有些则可以读写。远程仓库需要有个名字,origin是Git给你克隆的仓库服务器的默认名字
与他人协作涉及管理远程仓库以及根据需要推送或拉取数据。管理远程仓库包括了解如何添加远程仓库、移除无效的远程仓库、管理不同的远程分支并定义它们是否被跟踪等等。
克隆远程仓库
git clone命令会自动设置本地master分支跟踪克隆的远程仓库的master分支。运行git pull通常会从最初克隆的服务器上抓取数据并自动尝试合并到当前所在的分支。
查看远程仓库
如果想查看你已经配置的远程仓库服务器,可以运行git remote命令。它会列出你指定的每一个远程服务器的简写。
添加远程仓库
运行git remote add 添加一个新的远程Git仓库
从远程仓库中抓取与拉取
从远程仓库中获得数据,可以执行
git fetch [remote-name]
这个命令会访问远程仓库,从中拉取所有你还没有的数据。执行完成后,你将会拥有那个远程仓库中所有分支的引用,可以随时合并或查看。
推送到远程仓库
git push origin master
只有当你有所克隆服务器的写入权限,并且之前没有人推送过时,这条命令才能生效。当你和其他人在同一时间克隆,他们先推送到上游然后你再推送到上游,你的推送就会毫无疑问地被拒绝。你必须先将他们的工作拉取下来并将其合并进你的工作后才能推送。
查看远程仓库
如果想要查看某一个远程仓库的更多信息,可以使用 git remote show [remote-name] 命令。
远程仓库的移除与重命名
如果想要重命名引用的名字可以运行git remote rename去修改一个远程仓库的简写名
值得注意的是这同样也会修改你的远程分支名字
如果因为一些原因想要移除一个远程仓库,可以使用git remote rm
远程分支
当你切换了本地分支,但是在push的时候,不指定分支,事实上还是在向默认的origin/master。
因此如果你希望你的分支能够被提交到远程服务器上,让其他人也能看到他。需要执行git push (remote) (branch),例如:
git push origin testing
这样在远程服务器上便创建了origin/testing分支。
删除远程分支
可以运行带有--delete选项的git push命令来删除一个远程分支。
git push --delete origin testing
分支 - 分支开发工作流
通常我们在使用Git的时候,都会在master分支上保留完全稳定的代码——有可能仅仅是已经发布或即将发布的代码。
同时还有一些名为develop的平行分支,被用来做后续开发或者测试稳定性——这些分支不必保持绝对稳定,但是一旦达到稳定状态,它们就可以被合并入 master 分支了。
这样,在确保这些已完成的特性分支能够通过所有测试,并且不会引入更多 bug 之后,就可以合并入主干分支中,等待下一次的发布。
同时高水平的程序员也可以在review水平较低的程序员后,再合并代码。
这个过程我们叫Git工作流
Git 标签
Git可以给历史中的某一个提交打上标签,以示重要
列出标签
git tag
创建标签
Git使用两种主要类型的标签:轻量标签(lightweight)与附注标签(annotated)。
一个轻量标签很像一个不会改变的分支 - 它只是一个特定提交的引用。
附注标签是存储在 Git 数据库中的一个完整对象。可以包含打标签者的名字、电子邮件地址、日期时间等等
附注标签
在Git中创建一个附注标签是很简单的。最简单的方式是当你在运行tag命令时指定-a选项。-m选项指定了一条将会存储在标签中的信息。
git tag -a v1.4 -m 'my version 1.4' git tag v0.1 v1.3 v1.4
轻量标签
另一种给提交打标签的方式是使用轻量标签。创建轻量标签,不需要使用-a、-s或-m选项,只需要提供标签名字。
共享标签
git push命令并不会传送标签到远程仓库服务器上。在创建完标签后你必须显式地推送标签到共享服务器上。可以运行
git push origin [tagname]
检出标签
在Git中不能真的检出一个标签,因为它们并不能像分支一样来回移动。如果想要工作目录与仓库中特定的标签版本完全一样,可以使用
git checkout -b [branchname] [tagname]
这实际是在特定的标签上创建一个新分支
git常用命令行总结的更多相关文章
- git 常用命令行操作
git常用命令行操作: 点击 git bash 进入到命令行: git clone https://github.com/wlz1244/qingoo.git //下载一个master分支代码 g ...
- npm git 常用命令行 记录
1. 推出node命令行: 两次ctrl+C或者一次ctrl+D 退出终端:exit; 2.npm 常用 npm install <name> 安装包 npm install &l ...
- Git 常用命令行
最近在公司的服务器上安装了Git Sever,开始从SVN转向到Git了,整理了一些在Git常用的命令. 取得Git仓库 初始化一个版本仓库 git initClone远程版本库 git clone ...
- git常用命令行
查看.添加.提交.删除.找回,重置修改文件 git help <command> # 显示command的help git show # 显示某次提交的内容 git show $id gi ...
- git 常用命令行整理
1.创建分支dev git branch dev 2.切换到dev分支 git checkout dev 3.创建并切换本地分支,分支名为dev git checkout -b dev 4.查看本地所 ...
- Git终端命令行的常用操作
一.git源代码管理的优点 方便多人协同开发.工作 降低代码的管理成本 良好的分支管理机制 二.结构分析 服务端和客户端都有版本控制能力,都能进行代码的提交.合并 结构一: 结构二: 三.工作区的创建 ...
- Git 常用命令详解
Git 是一个很强大的分布式版本管理工具,它不但适用于管理大型开源软件的源代码(如:linux kernel),管理私人的文档和源代码也有很多优势(如:wsi-lgame-pro) Git 的更多介绍 ...
- Git 常用命令大全
Git常用操作命令: 1) 远程仓库相关命令 检出仓库:$ git clone git://github.com/jquery/jquery.git 查看远程仓库:$ git remote -v 添加 ...
- Git 常用命令2
Git 常用命令 Git 是一个很强大的分布式版本控制系统.它不但适用于管理大型开源软件的源代码,管理私人的文档和源代码也有很多优势. Git常用操作命令: 1) 远程仓库相关命令 检出仓库:$ gi ...
随机推荐
- ETL总结(扫盲版)
1.ETL名词解释 英文缩写 Extract-Transform-Load ,用来描述将数据从来源端经过抽取(extract).转换(transform).加载(load)至到目的端(一般指的是数 ...
- python web开发-flask中的url带斜线和不带斜线区别详解
通过flask进行路由配置的时候,有一个细节,就是同样的url,带上"/"和不带"/"有什么区别. 举例说明: 比如有个url,名字为"/url&qu ...
- Web开发,浏览器通讯原理及流程那点事,你应该听说下
题外话: 最近园子里,关于.net门槛的文章风风火火,不过这类事情每过段时间就会出来一次,所以酱油都懒的打了. 当然个人也是有想法的,特别是这两天碰巧和一个三四年经验的java开发者呆在一起,对方说. ...
- MapReduce浅析
很早之前就用过Hadoop,但对MapReduce中的具体数据流向过程一直不甚明了,用Python Streamming的方式写了几个MapReduce,对这个过程有了一定的认识. 首先我们知道,Ma ...
- leetCode:237 删除链表的结点
删除链表的结点 编写一个函数,在给定单链表一个结点(非尾结点)的情况下,删除该结点. 假设该链表为1 -> 2 -> 3 -> 4 并且给定你链表中第三个值为3的节点,在调用你的函数 ...
- Shell 读取用户输入
14.2 读取用户输入 14.2.1 变量 上一章我们谈到如何定义或取消变量,变量可被设置为当前shell的局部变量,或是环境变量.如果您的shell脚本不需要调用其他脚本,其中的变量通常设置为脚 ...
- 模拟select选中option的效果
大致情况如下:网页上有一个表单,表单中有一个select类型的控件,我要选择option后,表单相对应的input部分会option自动填充选中数据. 我想要的是:实现一个网页上的效果,在这个页面被打 ...
- 【Linux】 环境变量与shell配置&执行
■ 变量与环境变量 shell环境通常存在很多变量,变量可以通过echo $VAR或${VAR}的方式查看.set命令可以查看当前环境中的所有变量(包括一般的自定义变量和环境变量) 变量的设置通过简单 ...
- 随记PC-win7 64位系统网络连接状态一直转圈、等待状态的异常解决方案
各位看官好~ 最近电脑也做了下升级,入手个士必得360G的SSD来玩玩,顺便也下个新系统,看看有什么区别,想想顺便升级下系统也是好的,就开始了装机,装系统的路程~~~~~~ 好了不说废话,直接进入主题 ...
- ZJOI2018游记
我是一只普及组的菜鸡,我很菜 我参加 \(ZJOI\) 只是来试试水(水好深啊~),看看大佬(差距好大啊~),以后要好好学习 \(day0\) 下午2:00,颁奖 还以为要到很晚,还是挺快的 \(da ...