乐虎游戏|乐虎国际登录|欢迎你

常用Git命令汇总

日期:2020-03-13编辑作者:计算机资讯

跟着R哥来到了新公司(一个从硬件向互联网转型中的公司),新公司以前的代码基本是使用SVN做版本控制,所以R哥叫HG做了一次Git分享,准备把公司所有的代码用Git作版本控制。平时自己虽然天天使用Git,但是总感觉知识有些零散,于是汇总了一些常用的Git命令。

 

--system #系统级别--global #用户全局--local #单独一个项目git config --global user.name "xxxx" #用户名git config --global user.email "xxxx@xxx.com" #邮箱git config --global core.editor vim #编辑器git config --global alias.st status #按这种方法,配置别名git config -l #列举所有配置

#将工作区的修改提交到暂存区git add <file>git add . #------------------------------------------#将暂存区的内容提交到版本库git commit <file>git commit .git commit -a #包括git add/ git rm /git commint 这三个操作,所有一般在操作工作区的时候,直接删除了文件,而不是使用git rm的,最后提交是可以用这个,如下 #git commit -am "提交信息"git commit -amend #修改最后一次提交的信息#------------------------------------------# 抛弃工作区修改(使用当前暂存区的内容状态去覆盖工作区,从而达到抛弃工作区修改的作用)git checkout <file> git checkout . #------------------------------------------#改变暂存区的修改(其实是重置HEAD,将指定版本库的内容状态去覆盖暂存区,从而达到暂存区的改变)git reset <file> #从暂存区恢复到工作区(不指定版本id,则默认为最后一次提交的版本id)git reset . #从暂存区恢复到工作区git reset $id # 恢复到指定的提交版本,该$id之后的版本提交都恢复到工作区git reset --hard $id #恢复到指定的提交版本,该$id之后的版本提交全部会被抛弃,将不出现在工作区#注:如果不小心使用了错误的HEAD重置,会发现HEAD指向了重置的版本id,该版本之后的版本提交都不见了,使用git log也无法找到,那么怎么恢复呢?使用下面两个命令git reflog show master | head #会显示所有的版本记录git reset --hard $id #重新重置,至于--hard,请根据你时候将改变的内容放到工作区还是直接抛弃进行选择#------------------------------------------#恢复某次提交(其实是某提提交的回滚操作,不影响其他的提交,所产生的效果创建一个新版本提交去回滚将指定的提交删除,包括产生的差异文件不会出现在工作区,而是直接被抛弃)git revert <$id>git revert HEAD#这里有一个很好的讲解revert与reset的差异:git reset 是把HEAD向后移动了一下,而git revert是HEAD继续前进,只是新的commit的内容和要revert的内容正好相反,能够抵消要被revert的内容。#------------------------------------------#删除文件的几种方法(貌似Git2.0后有了变化)#第一种直接在工作区删除rm your_file #直接在工作区删除文件git add -u . #将有改动的都提交到暂存区(包括修改的,删除的等操作),貌似git2.0 不加 -u 参数也可以git commint -m "message" #提交版本库#第二种方法直接在工作区删除rm your_file #直接在工作区删除文件git commit -am "message" #这个在前面提过,直接可以提交版本库,-a会包括包括git add/ git rm /git commint 这三个操作#第三种方法使用git rmgit rm <file> #不仅在工作区将文件删除,同时将该删除操作提交到暂存区git commint -m "message" #提交版本库#关于git rm的其他补充git rm --cached <file> #从暂存区中除去该文件,git将不再跟踪该文件的变更,但仍然在工作区内,在需要.gitignore时经常用到

git diffgit diff <file> #比较工作区与暂存区文件的差异git diff --cached # 比较暂存区和版本库差异git diff <$id1> <$id2> # 比较两次提交之间的差异git diff <branch1>..<branch2> # 在两个分支之间比较

git branch -r #查看远程分支git branch new_branch_name #新建一个分支git branch --merged #查看已经被合并到当前分支的分支git branch --no-merged #查看未被合并到当前分支的分支git checkout branch_name #切换分支git checkout -b branch_name #创建分支并切换git branch -d branch_name #删除分支git branch -D branch_name #强制删除分支git push origin :branch-name #删除远程分支(先在本地删除该分支),原理是把一个空分支push到server上,相当于删除该分支。#从远程clone一个项目,虽然远程上该项目是有分支的,但clone下来后发现只有master分支,解决:git checkout -b not_master_branch origin/not_master_branch #本地创建一个分支,指向对应的远程分支git pull origin not_master_branch #将远程的not_master_branch分支pull下来git push origin not_master_branch #将修改后的not_master_branch分支push到远程的not_master_branch

git tag v1.0.0 [SHA] #打一个轻量级的tag,只是一个commit的指向引用,[SHA]是可选择值(某个commit的SHA),指定为哪个commit打tag,如果没写则直接为最后一个commit打taggit tag -a v1.0.0 -m "你的附注信息" [SHA] #一个带附注信息的tag,不是一个简单的引用,而是单独的一个对象,[SHA]是可选择值(某个commit的SHA),指定为哪个commit打tag,如果没写则直接为最后一个commit打taggit tag #列出所有的taggit show v1.0.0 #打印指定tag的信息git tag -d v1.0.0 #删除本地指定taggit push origin :refs/tags/v1.0.0 #删除远程tag

git remote -v # 查看远程服务器地址和仓库名称git remote show origin # 查看远程服务器仓库状态git remote add origin git@github:robbin/robbin_site.git # 添加远程仓库地址git remote set-url origin git@github.com:robbin/robbin #修改远程地址git remote rm #删除远程创库地址

git pull #=git fetch + git mergegit fetch #拉取git merge #合并git push # push所有分支git push origin master # 将本地主分支推到远程主分支git push -u origin master # 将本地主分支推到远程(如无远程主分支则创建,用于初始化远程仓库)git push origin <local_branch> # 创建远程分支, origin是远程仓库名git push origin <local_branch>:<remote_branch> # 创建远程分支git push origin :<remote_branch> #先删除本地分支(git br -d <branch>),然后再push删除远程分支

git stash #将工作区做的修改暂存到一个git栈中git stash list #查看栈中所有暂存git stash apply <暂存编号> #回复对应编号暂存到工作区,如果不指定编号为栈顶的,注意:这些暂存还在栈中git stash pop #将栈顶的暂存,恢复到工作区,并从栈中弹出git stash clear #清空暂存栈

git clone --bare git_url_path #clone的时候,将其创建成远程创库git --bare init #初始化项目的时候,创建成远程创库

为什么需要版本控制?

  • 场景1:

    • 你的代码正常工作
    • 你改了其中的几行代码
    • 程序出了问题
    • 你把代码改回来
    • 程序还是不能正常工作——为什么?
  • 场景2:

    • 你的程序昨天还能正常运行
    • 昨天晚上你修改了很多内容,做了很大的改进
    • 计算机,但是目前程序还不能正常运行
    • 客户今天要看你程序演示的demo
  • 场景3:
    • 第一天客户要求你写一个进度条对话框来显示进度
    • 第二天客户觉得对话框不好看,用进度条显示进度
    • 第三天客户又觉得还是对话框好看,重新用对话框
  • 场景4:

    • 有人在代码里面做了手脚,找出来这个人
    • 程序员不承认这是自己写的代码
  • 场景5:

    • 代码拥有者权限
  • 场景6:

    • 你改了代码的一部分,程序可以正常工作
    • 你同事改了代码的一部分,程序也可以正常工作
    • 你把你们的改动合并在一起,程序不正常工作了
    • 到底是代码那些地方发生了变化?
    • 什么变化让代码不能正常工作了?
    • 我如何跟同事一起协同的开发项目?
  • 场景7:

    • 项目管理,工作量统计

部分参考Robbin Fan大神的博客《Git常用命令备忘》

常见版本控制软件

  1.CVS :基本被SVN取代。CVS是一个C/S系统,是一个常用的代码版本控制软件。主要在开源软件管理中使用。与它相类似的代码版本控制软件有subversion。多个开发人员通过一个中心版本控制系统来记录文件版本,从而达到保证文件同步的目的。CVS版本控制系统是一种GNU软件包,主要用于在多人开发环境下的源码的维护。但是由于之前CVS编码的问题,现在大多数软件开发公司都使用SVN替代了CVS。

  2.SVN :目前使用最常用的主流版本控制软件。

  3.ClearCase :比较大型的版本控制软件。

  4.VSS :Windows平台开发最常用的。

  5.GIT:公司做项目的话用的不是很多。用于 Linux内核开发的版本控制工具,比如Android的源码就是用GIT做版本控制的。

SVN

svn简介:

  Svn(Subversion)是近年来崛起的版本管理工具,在当前的开源项目里(J2EE),几乎95%以上的项目都用到了 SVN。Subversion 项目的初衷是为了替换当年开源社区最为流行的版本控制软件CVS,在CVS的功能的基础上有很多的提升同时也能较好的解决CVS系统的一些不足。

什么是SVN服务器:

  SVN分为服务器端和客户端。服务器端运行在某一台服务器或者电脑上。服务器端通过配置文件管理用户名 密码 的配置,以及他们对软件项目目录的访问权限配置。
客户端一般集成在 软件开发人员的开发工具上,如eclipse
还可以使用 类似于
TortoiseSVN 的客户端软件访问 SVN 服务器,提交代码,合并代码等操作。

计算机 1

SVN服务器端安装

  VisualSVN是一款图形化svn服务器。官网

  下载地址:

  搭建svn服务器,安装步骤见我的另外一篇博文:如何搭建SVN服务器,详细安装步骤。

TortoiseSvn客户端

  TortoiseSVN 是svn版本控制系统的一个免费开源客户端,它是svn版本控制的 Windows 扩展。可以使你避免使用枯燥而且不方便的命令行。它完全嵌入 Windows Explorer,使用时只需在正常的窗口里点击右键操作就可以了。

下载安装地址

TortoiseSvn的安装,见我的另外一篇博文:TortoiseSvn的安装过程详解

SVN插件:subclipse

  eclipse上可以通过安装svn插件的方式实现代码的管理,eclipse中最常使用的SVN插件是subclipse。

  subclipse官网:

  

  SVN安装教程见,Mac下eclipse安装SVN插件。

SVN最佳实战

  1.单用户版本控制

  2.版本库的备份和还原

  3.多用户权限控制

  4.多用户版本控制

  5.多用户冲突合并

  6.SVN提交代码的规范

  7.采用svn管理android项目

  8.常见ignore文件类型

SVN图标详解(TortoiseSVN图标介绍:)

计算机 2

 

l一个新检出的工作复本使用如下绿色的对勾重载。表示Subversion状态正常。

计算机 3

l在你开始编辑一个文件后,状态就变成了已修改,而图标重载变成了红色感叹号。通过这种方式,你可以很容易地看出哪些文件从你上次更新工作复本后被修改过,需要被提交。

计算机 4

l如果在提交的过程中出现了冲突,图标变成黄色感叹号。

计算机 5

l如果你给一个文件设置了svn:needs-lock属性,Subversion会让此文件只读,直到你获得文件锁。只读文件具有这个重载图标来表示你必须在编辑之前先得到一个锁。

计算机 6

l如果你拥有了一个文件的锁,并且Subversion状态是正常,这个重载图标就提醒你如果不使用该文件的话应该释放锁,允许别人提交对该文件的修改。

计算机 7

l这个图标表示当前文件夹下的某些文件或文件夹已经被计划从版本控制中删除,或是该文件夹下某个受控的文件丢失了。容易引起误解,新版本客户端不常见了。

计算机 8

l加号告诉你有一个文件或是目录已经被计划加入版本控制。

计算机 9

 

本文由乐虎游戏发布于计算机资讯,转载请注明出处:常用Git命令汇总

关键词:

Maven pom 详明

Resources.../Resources Maven 属性默认只有在 pom.xml 中才会被解析,对于放在 src/main/resources/ 目录下的文件,maven 是需要通过...

详细>>

View 的可知性检查仍然为能够如此~

在Android开发中,我们常常会对View的可视性visiblity进行操作或者检查。如网络请求数据,根据返回的数据结果控制相应...

详细>>

Android Support Library介绍

更多原创文章和优质资源请关注公众号: ***转载、引用请标明出处*** 本文出自zhh_happig的简书博客   open_dev   网上对...

详细>>

计算机:RxJava2.0(一)

Outline 特此声明:本文为转载文章!尊重原创的劳动果实,严禁剽窃 本文转载于:http://www.jianshu.com/p/464fa025229e 出自于...

详细>>