您的位置:首页 > 其它

带你认识常用的Git命令

2016-12-06 17:44 211 查看
转载请注明出处:http://blog.csdn.net/crapulencezzz/article/details/53490185

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

廖雪峰:Git教程

阮一峰:Git远程操作详解

程序员头条:如何在Git中撤销一切

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

Git和SVN的区别:

svn是集中式版本控制系统,必须有一个中央服务器存放版本库,也就是必须联网才能使用。而git是分布式版本控制系统,每个人的电脑里都有完整的版本库,中央服务器只负责交换大家的更改。

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:已经提交了不合适的修改到版本库时,想要撤销本次提交,可以回退版本,不过前提是没有推送到远程库。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: