Git实用版

下载安装git就不说了,这是Git官网,里面都有:Git官网:http://git-scm.com/

mkdir learngit        //  在当前位置处创建一个名为learngit的文件夹.
cd learngit        //  打开这个文件夹.
pwd              // 显示当前目录.
git init       // 这一步很关键,直接创建出了一个git仓库,到此为之,这个目录已经可以由git管理了.
添加文件到Git仓库:
git add test.txt //  将名为test.txt的文件添加到git暂存区(git允许多次add一次性commit).
git add test/.  //将名为test文件夹下的所有文件都添加进暂存区
git commit -m"commit test.txt" //  将test.txt提交到git仓库.(引号里的内容是本次命令的备注)
git status  //  查看仓库的状态
git diff   //  顾名思义,就是查看文件的不同即做了什么修改(比如添加了一行).不加参数即默认比较工作区与暂存区
git diff HEAD --   //  查看工作区文件与版本库最新版本的区别.
git log  //  显示从近到远的提交日志. Ps: git log --pretty=online这个命令可以将日志简化,只输出版本号.
git reflog  //  不只是提交,这条命令记录你的每一条命令.  用处就是用于当回到过去的版本时,也可以通过这条       命令查看命令历史,从而可以穿梭回来
git reset --hard commt-id   //  返回到指定版本号的版本. Eg: git reset --hard 3546178就会回到指定的以    3546178开头的版本(版本号只用写前几位就好,git会帮我们找,但是也不能太少,七位就可以了).

这里写图片描述

上面这个图很好地说明了git工作区、暂存区(stage)的概念,有助于理解git工作原理.

撤销修改

  • git checkout – // 撤销工作区的修改

这里分两种情况:
一:文件自修改后还没有添加到暂存区(没有add)。–则会回到和版本库一样.
二:文件已经添加到了暂存区,才作了修改。 --则会回到刚添加到暂存区的状态.
总之,就是回到最近一次add或commit的状态.

  • git reset HEAD filename // 当你改乱了工作区的文件,还添加到了暂存区,这个命令可以撤销掉暂存区的更改,下放回工作区,接下来就按照上述办法撤销工作区的修改.

git diff

1.1 比较工作区与暂存区

git diff 不加参数即默认比较工作区与暂存区

1.2 比较暂存区与最新本地版本库(本地库中最近一次commit的内容)

git diff --cached [ …]

1.3 比较工作区与最新本地版本库

git diff HEAD [ …] 如果HEAD指向的是master分支,那么HEAD还可以换成master

1.4 比较工作区与指定commit-id的差异

git diff commit-id [ …]

1.5 比较暂存区与指定commit-id的差异

git diff --cached [] [ …]

1.6 比较两个commit-id之间的差异

git diff [] []

删除文件

rm filename    //  删除工作区的文件
git rm filename     
git commit -m"remove a file"     //  从版本库中删除文件(有提交操作).

git rm -r --cached test //本地删除test文件夹
git commit -m "remove test" //提交
git push origin master //远程的test文件夹也被删除

以上都是在本地操作,接下来引入远程库.
首先你要注册一个GitHub账号,然后你要做的就是将本地仓库与远程库连接起来,即可以将本地的东西推送到远程。

  1. 创建ssh key. 在用户主目录下,看看有没有.ssh目录,如果有,再看看这个目录下有没有id_rsa和id_rsa.pub这两个文件,如果已经有了,可直接跳到下一步。如果没有,打开Shell(Windows下打开Git Bash),创建SSH Key:ssh keygen -t rsa -C "youremail@xxx.com". ( 引号里是你注册的邮箱).
    然后一路回车就行.
    如果一切顺利的话,可以在用户主目录里找到.ssh目录,里面有id_rsa和id_rsa.pub两个文件,这两个就是SSH Key的秘钥对,id_rsa是私钥,不能泄露出去,id_rsa.pub是公钥,可以放心地告诉任何人。

  2. 登陆GitHub,打开“Account settings”,“SSH Keys”页面:
    然后,点“Add SSH Key”,填上任意Title,在Key文本框里粘贴id_rsa.pub文件的内容:
    github-addkey-1
    点“Add Key”,你就应该看到已经添加的Key:

github-addkey-2

这里有个很有用的东西:假如你有两个电脑,一会用这个,一会用那个,都需要连接到github(多个终端对一个git账号),只需要在第二个电脑上按照上述操作将ssh公钥添加到github(github允许一个账号有多个公钥),就ok了.
这样我们就为文件传输搭建好了渠道。

git remote add origin git@github.com:hhh/learngit.git
这个命令就是将当前的仓库(本地)与名为hhh(github用户名)的learngit仓库连接起来了。

git push -u origin master // 将本地master分支推送到远程库,第一次推送加了-u参数,以后的推送可以直接这样:
git push origin master
(第一次push会给出警告,只需输入yes即可).

接下来就是分支了。

查看分支:git branch

创建分支:git branch

切换分支:git checkout

创建 切换分支:git checkout -b

合并某分支到当前分支:git merge

删除(本地)分支:git branch -d
删除远程库的分支分两步: 
1.   git branch -r -d origin/branch-name  
2.   git push origin :branch-name 

合并分支:git merge    //将当前分支与指定分支合并
ps:    当分支合并出现冲突时,必须先解决冲突再进行合并
git log --graph命令可以看到分支合并图

git stash    // 将当前工作现场保护起来,等到恢复现场后继续工作
git stash list   //  查看现场储藏到哪里了

恢复现场有两种办法:
一是用git stash apply恢复,但是恢复后,stash内容并不删除,你需要用git stash drop来删除;
另一种方式是用git stash pop,恢复的同时把stash内容也删了。
你可以多次stash,恢复的时候,先用git stash list查看,然后恢复指定的stash,用命令
git stash apply stash@{0}

如果要丢弃一个没有被合并过的分支,可以通过git branch -D 强行删除

git remote -v    // 查看当前仓库所连接的远程库的信息
git push origin  //就是将指定分支推送到远程,可以是master分支,也可以是其他分支

###error_1
我们经常会被下面这个error 困扰:

git push origin dev
To git@github.com:michaelliao/learngit.git
 ! [rejected]        dev -> dev (non-fast-forward)
error: failed to push some refs to 'git@github.com:michaelliao/learngit.git'
hint: Updates were rejected because the tip of your current branch is behind
hint: its remote counterpart. Merge the remote changes (e.g. 'git pull')
hint: before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.

原因就是远程库在你push之前已经有了一个更新,你的push必须和它合并后才能推送。
先把git的东西fetch到你本地然后merge后再push,即:

$ git fetch
$ git merge

这两句相当于

git pull一般就用这一句就好啦

再push,maybe我们还会遇到这样一个error:

git pull
remote: Counting objects: 5, done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 3 (delta 0), reused 3 (delta 0)
Unpacking objects: 100% (3/3), done.
From github.com:michaelliao/learngit
   fc38031..291bea8  dev        -> origin/dev
There is no tracking information for the current branch.
Please specify which branch you want to merge with.
See git-pull(1) for details
					 git pull

If you wish to set tracking information for this branch you can do so with:

    git branch --set-upstream dev origin/


git给我们说的很清楚,因为当前分支没有指定和远程哪个分支pull,导致错误。所以需要建立他们的联系,用这条命令:

git branch --set-upstream-to=origin/remote_branch your_branch

这下就可以pull了,pull的过程中可能会出现冲突,因为涉及到了merge,解决掉冲突(这里的冲突举个例子:比如你同学push说他昨天去欧洲,你push的说他昨天去西藏,就会出现冲突,解决的办法就是你们商量一下是吧,到底是谁改,最后看你用哪个版本的)然后再push就ok了。

###error_2
好,我们git branch --set-upstream-to=origin/remote_branch your_branch操作之后,再pull,出现了这样的错误

There is no tracking information for the current branch.
Please specify which branch you want to merge with.
See git-pull(1) for details.

    git pull <remote> <branch>

If you wish to set tracking information for this branch you can do so with:

    git branch --set-upstream-to=origin/<branch> master

这里就是说,pull的时候没有指定远程分支是谁

**git pull origin/master master **

这样就可以了。

###error_3
pull之后提示,

fatal: refusing to merge unrelated histories

git pull origin/master master --allow-unrelated-histories

表示我要用本地master分支pull远程master分支,允许不相关

####error_4

Please enter a commit message to explain why this merge is necessary.

这里写图片描述

git 在pull或者合并分支的时候有时会遇到这个界面。可以不管(直接下面3,4步),如果要输入解释的话就需要:

1.按键盘字母 i 进入insert模式

2.修改最上面那行黄色合并信息,可以不修改

3.按键盘左上角"Esc"

4.输入":wq",注意是冒号+wq,按回车键即可

查看是否连接上github:

ssh -T git@github.com

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值