所谓Git,就是分布式版本控制系统,用于高效的处理任何或大或小的项目。这是它和其他非分布式的版本控制系统,例如SVN、CVS等,最核心的区别。SVN的缺点很明显:假如中心代码挂掉,很难恢复;每次提交都要有网络。而Git的本地库和远程库完全一样,任何一个点出问题,都可以完全恢复代码。本人也是这两天才开始学习Git,由于命令比较多,所以总结一下,方便后面查看。
1.安装后设置名字和邮箱
由于Git是分布式版本控制系统,所以每台机器都必须要设置名字和Email地址。
$ git config --global user.name "Your name"
$ git config --global user.email "Email@example.com"
2.常用的基本命令
因为Git Bash是模拟Linux环境,所以很多都和Linux命令一样。
- pwd (process work directory) 查看当前目录
- ls (list) 当前目录文件
- ls -a (all) 全部文件(包括以.开头的隐藏文件)
- ls ./ 当前目录
- ls ../ 上一层目录
- ls -l (long) 给出更长的信息
- cd (change directory) 切换目录
- cd ../(/可以省略)
- cd ~ 切换到根目录
- mkdir (make directory) 创建目录
mkdir -p(path) a/b/c 在a里面创建b,b里面创建c - touch a.html 创建文件
- rm (remove) 删除文件
- rm -r (recursively) 删除目录
- mv (move) A B 把A重命名为B
- cp (copy) -r a b 将文档a复制到目录b下,文件名仍为a
- echo 1 把数字1打印出来
echo 1 > test.txt ">"表示把前面命令的结果写入后面的文件中 - cat test.txt 查看文件
cat test2.txt | less(|为管道)把文档一页一页显示,J往上看,K往下看。适用于文档比较长的情况(q 退出) - head test2.txt 显示前几行
head -n 3 test2.txt 显示前三行
tail -n 3 test2.txt 显示尾三行 - du -sh 显示目录大小
- ls --help(两个以上字母,两个-) 帮助文档
ls -h (一个字母,一个-)
3.小技巧
- alt + . (alt按着不放,再按.,可以把上次命令的参数写出来)
- !! (重复上次命令)
- . (当前目录)
- .. (上层目录)
- ~ (user下面以你名字命名的目录)
- mkdir "a b" (参数中有空格,需要用引号;没有空格,可以不加)
4.生成SSH key
我们在使用Github的时候,默认的是使用HHTP通信协议取得Git远程库。但HTTP每次执行远程仓库一般都会要求输入用户名和密码,比较麻烦。所以我们可以使用SSH协议,通过预先生成的密钥来验证身份。
关于如何生成SSH key可以参考官方文档:
generating SSH keys
这里需要注意的是我们在生成SSH keys的时候,默认的是使用HHTP通信协议取得Git远程库。如果一开始没有注意这个问题,我们的地址就会绑定错误,这时候如果直接增加origin标签,输入:
$ git remote add origin git@github.com:jirengu/git-test3.git
会出现fatal错误,提示origin已经存在。所以我们需要先删除origin标签(第二行代码):
$ git remote -v
$ git remote remove origin
然后再重新增加origin标签就可以了(第一行代码是查看远程端信息)。
5.单人操作
在介绍操作之前,首先介绍一下git的四个区:
- 工作文件夹(不加入缓冲区git不管)
- 暂存区 Stage (纳入git管理记录,)
- 本地仓库 Local (纳入版本控制,是本地的库,其他人不生效)
- 远程仓库 Remote(在远程服务器,可使用ssh/git/https协议)
一般建议在c盘新建一个文件夹:
$ cd /c
$ mkdir git-test3
$ cd git-test3
接下来把当前文件夹初始化为一个git库:
$ git init
把当前文件夹所有的文件放入暂存区:
$ git add .
提交到库,以下三行代码,输入任何一行都可以,作用有些差别。第一句会默认打开vim编辑器,可以输入更多的信息;第二句不会打开编辑器,适用于简单的加入一句话;第三句,可以把所有的修改都提交,包括删除的文件。
(ps:vim编辑器的退出方法一般分为保存和不保存,操作分别为:“Esc”、“:”、“wq”、回车;“Esc”、“:”、“q!”、回车。)
$ git commit
$ git commit -m "add"
$ git commit -am "add"
然后放入远程库,给远程库取名为origin,下次推送可以直接推送到origin地址(git push):
$ git remote add origin git@github.com:jirengu/git-test3.git
6.多人操作
如果是多人合作一个项目,第一步,需要把远程库的代码拉到本地,使用命令:
$ git clone git@github.com:jirengu/git-test3.git
接下来要进行的操作
- git pull
- 解决冲突(如果出现冲突的话)
- git push
7.代码提交不顺利情况
在git push后出现错误,可能是因为其他人提交了代码,而使你的本地代码库版本不是最新的。 这时你需要先git pull代码,再检查是否有文件冲突。 没有文件冲突的话需要重新走一遍代码提交流程add —> commit —> push。
8.解决冲突
冲突一般发生在git pull的时候,当结果出现UU,就说明产生了冲突。比如说结果出现:UU readme.txt,说明产生了冲突需要解决它。
$ vi readme.txt
搜索文件里面的“====”,在文档上部找到“<<<<”(<<<<和====之间的部分为本地冲突,====和>>>>之间的部分为远程冲突), 修改里面的内容,解决方案为:用上面的或者下面的或者将两者合并,再把“<<<<”“====”“>>>>”删掉。最后输入命令:
$ git status -sb
$ git add .
$ git status
$ git commit -m "merge"
$ git push
就可以成功的推送了。这其中需要注意的是,解决冲突之后,要添加文件(add)。
9.变更项目地址
假设已经有库,先处于另一个项目test-demo,现在要把当前文件代码推送到另一个项目上,这时候我们可以再新建一个标签(比如取名为git-test),让它代表新项目的地址,通过SSH连接到库上:
$ git remote add git-test git@github.com:3.git
$ git remote -v
$ git push git-test master
(ps:如果要进行强制推送,命令为:git push -f git-test master,表示把本地库强制推送到名叫git-test的远程库的master分支上)
10.分支
创建分支可以避免提交代码后对主分支的影响,可以不让自己的记录打扰到合作者。同时也使你有了相对独立的开发环境,分支具有很重要的意义。
-
新建本地分支:
- 创建分支:git branch feature
-
查看分支:git branch -a(*表示当前分支)
-
切换分支:git checkout feature
-
把本地的分支feature更新到远程分支feature:git push origin feature:feature
-
合并分支:
-
git checkout master
-
git merge feature
-
git branch -d feature (删除分支,先合并再删除)
合并分支的操作是从feature合并到master分支,当前在master分支上。
- 删除远程分支feature
git push origin :feature
11.版本退回
版本回退用于线上系统出现问题后恢复旧版本的操作。
git reset HEAD(分支号的前面六位就可以)
git status -sb
上面代码的结果是工作目录没有更改,文件仍然存在,只改git认为的最新状态。如果要进行硬盘改写,则可以输入:
git reset --hard HEAD
查看所有的提交:
git reflog
由于自己第一次用git,感觉东西比较多,所以把学到的东西总结了一下。后面接触的多了,知道的多了再来慢慢补充。
网友评论