带你认识常用的Git命令

转载请注明出处:http://blog.csdn.net/crapulencezzz/article/details/53490185

关于Git的博客网上已经有很多,本篇也只是带你认识最基本,开发必备的一些Git命令。如果感兴趣可以去Git官网瞅瞅,当然本篇博客的指令参考自下面的博客:

这里面尤其是廖老师的博客是最为详细的,推荐学习。本人也是通过这篇博客认识的Git。另外两篇是一些场景才能用到的命令,属于比较高级的功能了。

Git和SVN的区别:

  1. svn是集中式版本控制系统,必须有一个中央服务器存放版本库,也就是必须联网才能使用。而git是分布式版本控制系统,每个人的电脑里都有完整的版本库,中央服务器只负责交换大家的更改。
  2. git和其他版本控制系统如svn的一个不同之处是有暂存区的概念。git如果不先add到暂存区,就无法commit到版本库。

几个概念:

  • 工作区(Working Directory)就是你在电脑里能看到的目录,比如你们项目里包含.git隐藏文件的文件夹其实就是一个工作区。
  • 版本库(Repository)其实就是隐藏的.git文件。

版本控制的局限:

  • 所有的版本控制系统,都只能跟踪文本文件的改动,比如TXT文件,网页,所有的程序代码等等,Git也不例外。而图片、视频这些二进制文件,虽然也能由版本控制系统管理,但没法跟踪文件的变化,只能把二进制文件每次改动串起来,也就是只知道图片从100KB改成了120KB,但到底改了啥,版本控制系统不知道,也没法知道。但是文本是有编码的,如果没有历史遗留问题,强烈建议使用UTF-8进行编码。

用法:

  • ssh-keygen 生成密钥文件
  • cat ~/.ssh/id_rsa.pub 显示公钥内容,需要把它复制给管理员,用来开放权限
上面两个虽然不是Git命令,但是新建项目添加成员时必备的指令。
  • git config –global user.name “YOUR_NAME” 配置账号(去掉 –global 可以单独配置一个仓库的账号)
  • git config –global user.email “YOUR_EMAIL” 配置邮箱(去掉 –global 可以单独配置一个仓库的邮箱)
  • git init 在当前目录创建代码仓库,会生成一个隐藏的.git文件
  • git add xxx 把要上传的文件添加到暂存区,可反复多次使用,添加多个文件
  • git commit -m “xxx” 提交暂存区代码到本地仓库的当前分支,必须添加注释
  • git status可以让我们掌握工作区当前的状态,比如哪些文件改动过了
  • git diff 查看具体修改的内容
  • git log 显示从最近到最远的提交日志,以便确定要回退到哪个版本,按q退出
  • git log –pretty=oneline 同上,只是做了简化显示
  • git reset –hard HEAD^ 回退到上一个版本
  • git reset –hard 指定版本的commit id指定回到某个版本
  • git reflog 记录每一次跟版本有关的命令,以便确定要回到未来的哪个版本
  • git checkout – 可以丢弃当前工作区的修改,总之就是回到最近一次git commit或git add时的状态
  • git checkout . 丢弃当前工作区的所有修改,注意用之前一定要使用git status查看一下工作区的状态(注意这里有个“.”的!)
  • git reset HEAD 可以把暂存区的修改回退到工作区
  • git rm 从版本库删除文件
  • git remote add origin git@server_name:path/repo_name.git 关联远程仓库
git remote add origin git@github.com:dysaniazzz/learngit.git 关联远程的git仓库,注意dysaniazzz是你自己的GitHub账户名,learngit是你自己的仓库名
  • git push -u origin master 将当前分支内容提交到远程master分支(第一次提交,远程仓库是空的,所以我们加上了-u参数)
  • git push origin master 将当前分支的内容提交到远程的master分支(后续提交)
 1、当第一次使用git clone或者git push命令连接GitHub时,会得到一个警告,这时候输入yes回车即可,其实是把GitHub的key添加到本机的一个信任列表里。以后再提交就不会出现警告了。
 2、如果是从零开始出发,那么最好的方式是先创建远程库,然后从远程库克隆。
  • git branch 查看本地所有分支以及当前处在哪一分支
  • git branch -a 查看所有分支(本地+远程)
  • git branch 创建分支
  • git checkout 切换分支
  • git checkout -b 创建并切换分支,相当于git branch 和git checkout
  • git merge 合并branch_name分支到当前分支
  • git branch -d 删除branch_name分支
  • git brach -D 强行销毁branch_name分支,比如该分支内容尚未合并到主分支就要将其删除时可以使用,慎用!
  • git log –graph –pretty=oneline –abbrev-commit 类似图形化的显示每次提交及分支情况
  • git stash 将工作现场储藏起来,等以后恢复现场后继续工作(比如线上报了一个bug,需要紧急处理,这时候需要新建一个bug分支,然后切过去修改,但是手头的工作只进行到一半还无法提交,就可以使用这个命令)
  • git stash pop 恢复工作现场后并将stash内容删除
  • git stash list 查看版本库里所有的stash
  • git remote 查看远程分支的信息
  • git remote -v 查看远程分支的信息,更详细,比如显示push和fetch的地址和权限
  • git push origin 将branch_name分支的内容推送到远程分支
注意:并不是一定要把本地分支往远程推送!
master分支是主分支,因此要时刻与远程同步;
dev分支是开发分支,团队所有成员都需要在上面工作,所以也需要与远程同步;
bug分支只用于在本地修复bug,就没必要推到远程了,除非老板要看看你每周到底修复了几个bug;
feature分支是否推到远程,取决于你是否和你的小伙伴合作在上面开发。
总之,就是在Git中,分支完全可以在本地自己藏着玩,是否推送到远程,视需求和心情而定!
  • git tag 给当前分支的最新一次commit打上tag(可以根据需要切换branch和commit)
  • git tag 查看所有标签(不是按时间排序,而是按字母排序)
  • git tag 给某一次commit打上tag
  • git show 查看标签信息,即其对应那一次commit的内容
  • git tag -a -m 给某一次commit创建带有说明的标签,-a指定标签名,-m指定说明文字
  • git tag -d 删除对应的标签
  • git push origin 推送某个标签到远程
  • git push origin –tags 一次性推送全部尚未推送到远程的本地标签
  • git push origin :refs/tags/ 删除推送到远程的标签(需要先删除本地标签,执行git tag -d )
每发布一个版本时,可以把最后一次commit设一个容易记住且有意义的tag,比如v2.3,让它跟commit绑定到一起,这样版本回退到某一个版本时可以使用tag很容易查到commit
  • git clone 克隆某个项目到本地硬盘(如果是别人的项目,需要先fork到自己的仓库,然后克隆自己仓库的地址才可以正常提交,否则没有权限,无法修改)
  • git config –global color.ui true 让Git命令显示出的命令带有颜色
  • git chek-ignore -v 如果一个文件无法add,可以用这个命令查看是否在.gitignore中配置了
  • git config –global alias. 给一个命令配置别名,比如git config –global alias.st status
来一个更加丧心病狂的:git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"

场景:

1、撤销未提交的修改:

  • 只适用于还没有进行add命令的文件:比如我们修改了MainActivity里的一些代码,但是还没有提交,这时候就可以使用git checkout命令来撤销修改
git checkout src/com/example/providertest/MainActivity.java
  • 对于已添加的文件我们应该先对其取消添加,然后才可以撤回提交,取消添加使用git reset命令:
git reset HEAD src/com/example/providertest/MainActivity.java

这时候运行git status发现文件变成未添加状态,再运行git checkout就可以撤销修改了。

2、对于一个版本库如何从HTTPS迁移到SSH:

D:\Space\ASSpace\DysaniazzZ>git remote -v
origin  https://github.com/DysaniazzZ/HelloAndroid.git (fetch)
origin  https://github.com/DysaniazzZ/HelloAndroid.git (push)
D:\Space\ASSpace\DysaniazzZ>git remote set-url origin git@github.com:DysaniazzZ/HelloAndroid.git
D:\Space\ASSpace\DysaniazzZ>git remote -v
origin  git@github.com:DysaniazzZ/HelloAndroid.git (fetch)
origin  git@github.com:DysaniazzZ/HelloAndroid.git (push)

3、一台电脑配置两个账户,比如一个工作一个自己的GitHub,教程:http://notes.seirhsiao.com/2016/01/24/2014-09-30-github-multiple-account-and-multiple-repository/

4、Host Key Verification Failed的解决办法(不能连接到远程的GitHub仓库),教程:http://stackoverflow.com/a/29380765/6482350。也可以执行下面的命令:

ssh-keyscan -t rsa github.com >> ~/.ssh/known_hosts

5、Git分支与合并:假设有两个分支,m1分支和m2分支(本地和远程都有)。我们在m1分支写代码,由于要修复一个bug,我们开辟了一个m2分支,修改测试完毕后需要合并到m1分支上。我们需要先在m2分支上提交到m2的本地和远程,然后切换到m1分支上,先更新代码,然后merge m2分支到m1分支。最后push到远程的m1分支(千万别忘了还要push到远程,在AS的VCS–>Git–>Push中)

6、Git Stash:适用于当一个分支正在写一个功能,但是还没有弄完,这时候需要去另外一个分支处理 bug,而你又不想提交,因为当前分支的功能还没有实现完。这时候就可以使用 git stash 命令来临时储藏代码,当在另外分支改完 bug 切回来后,就可以使用 git stash pop 取出储藏的内容。
教程:https://git-scm.com/book/zh/v1/Git-%E5%B7%A5%E5%85%B7-%E5%82%A8%E8%97%8F%EF%BC%88Stashing%EF%BC%89

7、撤销更改:

  • 场景1:当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令git checkout – file_name。
  • 场景2:当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步,第一步用命令git reset HEAD file_name,就回到了场景1,第二步按场景1操作。
  • 场景3:已经提交了不合适的修改到版本库时,想要撤销本次提交,可以回退版本,不过前提是没有推送到远程库。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值