下载安装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账号,然后你要做的就是将本地仓库与远程库连接起来,即可以将本地的东西推送到远程。
-
创建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是公钥,可以放心地告诉任何人。 -
登陆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