您的位置:首页 > 其它

Git小白入门常用命令

2017-06-04 16:27 302 查看
感谢廖雪峰老师官网上的Git教程,让我学习了相关的知识,现在对上一阶段的学习做一些总结(强烈建议学习廖雪峰老师的教程),更多细节参考其网站上的git教程。

安装Git

略过。

在安装后需要先设置相关配置:

$ git config--global user.name "YourName"
$ git config--global user.email "YourEmailAddress"


创建版本库

$ mkdir learngit //在用户主目录下创建目录
$ cd learngit
$ git init //把这个目录变成Git可以管理的目录
$ vim test.txt//写一个你需要放入git仓库的文件


然后我们需要把这个test文件放入Git仓库中

$ git add test.txt //把test.txt添加到暂存区
$ git commit -m "<本次提交你的说明>"//把暂存区所有文件提交到当前分支


注意:

1.add 可以添加多个文件,例如 git add test1.txt test2.txt

2.commit 一次就可以提交多个文件

查看仓库当前状态

$ git status


查看工作区文件和版本库文件的差异

例如你在提交了一次test.txt文件后,有对它做了修改,此时你可以用下面命令查看它们之间的差异

$ git diff HEAD -- text.txt


查看版本库历史纪录

$ git log


输入上述命令,显示的信息很好理解,其中的commit 后面的一大串字符串就是版本号

版本回退

通过查看历史版本的commit_id,你可以轻松回到以前的版本(你只要输入commit_id的前几个字符)

$ git reset --hard commit_id


git中HEAD表示当前版本,上一个版本是HEAD^,上上一个版本是HEAD^^,往上10个版本是HEAD~10

于是你又可以通过以下命令回到上一个版本

$ git reset --hard HEAD^


问题来了,今天提交了一次最新版本v3.0,然后回到了以前的v1.0,通过git log已经找不到v3.0版本的commit_id了,怎么办呢?

1.在终端中找到v3.0的commit_id然后reset,这是你终端没有关闭的情况下。

2.通过以下命令你还是可以找到v3.0的commit_id的:

$ git reflog


然后再reset即可。

撤销修改

修改文件还没有添加到暂存区

$ git checkout -- test.txt


上述作用在于把存在在此分支上的test.txt拷贝代替工作区对应文件,其直接作用就是撤销工作区的修改

已经添加到暂存区

$ git reset HEAD -- test.txt


上述命令可以把在暂存区的修改撤销掉,然后再重复上面checkout命令撤销工作区修改即可。

已经提交到此分支上

进行版本回退。

删除文件

删除工作区的文件:

$ rm test.txt


如果发现删除错误,可以用checkout重新拷贝一份。

删除此版本库的文件

$ git rm test.txt
$ git commit -m "remove test.txt"


如果发现删除错误,只需要进行版本回退。

远程仓库使用前奏

1.创建SSH key:

在用户主目录下,看看有没有.ssh目录,如果有,再看看这个目录下有没有id_rsa和id_rsa.pub这两个文件,如果已经有了,可直接跳到下一步。如果没有,打开Shell(Windows下打开Git Bash),创建SSH Key:

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


你需要把邮件地址换成你自己的邮件地址,然后一路回车,使用默认值即可,由于这个Key也不是用于军事目的,所以也无需设置密码。

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

2.添加SSH key到github:

github->setting->SSH and GPG keys->New SSH key->key框中的内容复制id_rsa.pub文件中的内容->add SSH key.

上传到远程仓库

1.假设你想上传到github上的仓库的名字叫test。

2.在本地的仓库里面运行下面命令:

$ git remote add origin git@github.com:YourName/test.git


远程库的默认名字就是origin

3.然后,就可以把本地库的内容全部push上去:

$ git push -u origin master


由于远程库是空的,加上 -u 参数,git不但会把本地分支master内容推送到远程的master分支,还会把两者联系起来,以后推送的时候就可以简化命令,如:

$ git push origin master


从远程库克隆

git clone git@github.com:Name/repository.git


对应换掉Name和repository即可。

实际上,Git支持多种协议,默认的git://使用ssh,但也可以使用https等其他协议。

远程库一般操作

查看远程库信息

$ git remote (-v)//v参数显示更加详细的信息


推送

$ git push origin master
$ git push origin dev


克隆

$ git clone git@github.com:Username/repository.git


但在默认情况下,克隆后只能看见本地的master分支,如果需要在dev分支上工作,必须创建远程的origin的dev分支到本地:

$ git checkout -b dev origin/dev


当然,每次工作结束后,都要push一下到origin 的dev分支:

$ git push origin dev


pull解决冲突

由于你的小伙伴的最新提交和你试图提交的有冲突,于是你要用以下方式解决:

$ git branch --set-upstream dev origin/dev //建立本地dev和远程origin的dev分支的链接
$ git pull
//这时会出现合并冲突,你需要先解决冲突,然后再commit,再push


创建分支

$ git checkout -b dev


其实上面等价于:

$ git branch dev
$ git checkout dev


查看当前分支:

$ git branch


你可以在此分支做修改,执行add和commit的命令。

在完事后,你又可以切换分支到master分支:

$ git checkout master


合并分支

Fast-forwars模式

将dev分支合并到当前master分支上:

$ git merge dev


–no-ff模式(no fast forward)

再Fast forward模式中,删除了分支会丢掉分支信息,而–no-ff模式会在合并的同时生成一个新的commit,以后就可以通过查看历史就可以看到分支信息。

$ git merge --no-ff -m "..." dev


于是,你可以用:

$ git log --graph --pretty=oneline --abbrev-commit


查看分支历史

但是如果在不同分支修改了同一个文件并且都commit上去的了,而你试图将这两个分支合并,这是会产生冲突的,解决方法如下:

1.先执行:

$ git status


查看冲突文件。

2.修改冲突文件,修改冲突部分,重新add和commit。

3.这个时候冲突已经解决了,你可以查看分支的合并情况。现在你可以删除分支了。

删除分支

$ git branch -d dev
$ git branch -D dev//强制删除分支,即使它没有被合并,删除后数据丢失


保存当前分支工作

假设你现在在dev分支,因为某种情况,你要在其它分支工作,所以你先要保存现在dev分支的工作:

$ git stash


然后你可以切换分支,在其它分支干活了。

干完其它脏活后(- 。-),你重新回到dev分支,你需要重新在此工作:

$ git stash list


你可以看到你保存的工作。

你怎么样取会特定的工作呢?

$ git stash pop // 恢复的同时把stash也删除了
$ git stash apply stash@{n}//恢复指定的工作
$ git stash drop


创建标签

首先切换到需要打标签的分支上,然后:

$ git tag <tagname>
$ git tag <tagname> <commit id> //给特定的commit id 打上tag


查看标签

$ git tag


查看标签信息

$ git show <tagname>


删除标签

$ git tag -d <tagname> //删除本地标签
$ git push origin :refs/tags/<tagname> //如果还要删除远程上的标签,则要加上这一步


推送某个标签到远程

$ git push origin <tagname>
$ git push origin -tags //push all
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: