Git简介
安装Git
$ git config --global suer.name "pony"
创建版本库
创建一个版本库非常简单,首先,选择一个合适的地方,创建一个空目录(确保目录名不包含中文)
$ cd D:/doc/
$ mkdir learngit
$ cd learngit/
$ pwd
git init
命令把这个目录变成Git可以管理的仓库
$ git init
[master (root-commit) bd23402]1 file changed, 2 insertions(create mode 100644 readme.txt
4、为什么有add和commit?
时光机穿梭
查看状态
-
要随时掌握工作区的状态,使用
git status
命令。 -
如果
git status
告诉你有文件被修改过,用git diff
可以查看修改内容。
版本回退
-
HEAD
指向的版本就是当前版本,因此,Git允许我们在版本的历史之间穿梭,使用命令git reset --hard commit_id
。 -
穿梭前,用
git log
可以查看提交历史,以便确定要回退到哪个版本。 -
要重返未来,用
git reflog
查看命令历史,以便确定要回到未来的哪个版本。
工作区和缓存区
管理修改
add
到暂存区,那就不会加入到
commit
中
git diff HEAD -- readme.txt
命令可以查看工作区和版本库里面最新版本的区别
撤销修改
场景1:当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令git checkout -- file
。
场景2:当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步,第一步用命令git reset HEAD file
,就回到了场景1,第二步按场景1操作。
场景3:已经提交了不合适的修改到版本库时,想要撤销本次提交,参考版本回退一节,不过前提是没有推送到远程库。
删除文件
$ git checkout -- test.txt
$ git rm test.txt
rm 'test.txt'
$ git commit -m "remove test.txt"
[master d17efd8] remove test.txt
1 file changed, 1 deletion(-)
delete mode 100644 test.txt
远程仓库
GitHub
id_rsa
和
id_rsa.pub
这两个文件,如果已经有了,可直接跳到下一步。如果没有,打开Shell(Windows下打开Git Bash),创建SSH Key:
$ ssh-keygen -t rsa -C "lingzeng86@126.com"
.ssh
目录,里面有id_rsa
和id_rsa.pub
两个文件,这两个就是SSH Key的秘钥对,id_rsa
是私钥,不能泄露出去,id_rsa.pub
是公钥,可以放心地告诉任何人。id_rsa.pub
文件的内容,就可以了。
添加远程库
The authenticity of host 'github.com (192.30.253.113)' can't be established.RSA key fingerprint is 16:27:ac:a5:76:28:2d:36:63:1b:56:4d:eb:df:a6:48.Are you sure you want to continue connecting (yes/no)? yesWarning: Permanently added 'github.com,192.30.253.113' (RSA) to the list of known hosts.Counting objects: 20, done.Delta compression using up to 4 threads.Compressing objects: 100% (15/15), done.Writing objects: 100% (20/20), 1.65 KiB | 0 bytes/s, done.Total 20 (delta 4), reused 0 (delta 0)remote: Resolving deltas: 100% (4/4), done.To git@github.com:zenglingming/learngit.git* [new branch] master -> masterBranch master set up to track remote branch master from origin.
git push
命令,实际上是把当前分支
master
推送到远程。
由于远程库是空的,我们第一次推送master
分支时,加上了-u
参数,Git不但会把本地的master
分支内容推送的远程新的master
分支,还会把本地的master
分支和远程的master
分支关联起来,在以后的推送或者拉取时就可以简化命令。
从现在起,只要本地作了提交,就可以通过命令:
$ git push origin master
master
分支的最新修改推送至GitHub,现在,你就拥有了真正的分布式版本库!
从远程库克隆
分支管理
创建与合并分支
Git鼓励大量使用分支:
查看分支:git branch
创建分支:git branch <name>
切换分支:git checkout <name>
创建+切换分支:git checkout -b <name>
合并某分支到当前分支:git merge <name>
删除分支:git branch -d <name>
解决冲突
git log
也可以看到分支的合并情况:
$ git log --graph --pretty=oneline --abbrev-commit
* 59bc1cb conflict fixed
|\
| * 75a857c AND simple
* | 400b400 & simple
|/
* fec145a branch test
...
分支管理策略
Git分支十分强大,在团队开发中应该充分应用。
合并分支时,加上--no-ff
参数就可以用普通模式合并,合并后的历史有分支,能看出来曾经做过合并,而默认的fast forward
合并就看不出来曾经做过合并。
Bug分支
git status
查看工作区,就是干净的(除非有没有被Git管理的文件)
git stash apply
恢复,但是恢复后,stash内容并不删除,你需要用
git stash drop
来删除
git stash pop
,恢复的同时把stash内容也删了
$ git stash list
$ git stash apply stash@{0}