Skip to main content

02.基础用法

 1, $ git init     初始化一个仓库
2,机器信息名
$ git config --global user.name "Your Name"
$ git config --global user.email "email@example.com"
3,查看信息
$ git config --list
******************提交文件和说明***************
4,$ git add [文件名] 该目录下登记一个文件git信息,Git才能监视文本的修改
$ git add .(或者 git add *) 提交多个文件
5,将修改的文件提交上去
$ git commit -m "wrote a readme file";//引号是提交的说明,可以随意写,用来标明提交的内修改内容
6, $ git status //查看文件的状态,如是否提交
7, $ git diff //查看本次修改的地方,如果提交,限于提交前查看
8, 查看修改的日志
$ git log
q //退出日志
9,退回上次版本
$ git reset --hard HEAD^
10,跳到指定的版本
$ git reset --hard [版本号]
11,记录命令日志
$ git reflog
12,查看当前修改的内容和版本库最新的区别
git diff HEAD -- [文件名]
13,工作区撤消修改
$ git checkout -- [文件名]
14,暂存区撤消修改
$ git reset HEAD -- index.php
15,删除版本文件,如果rm -rf 文件 只要版本库没有删除,就可以从版本库中恢复到工作区
$ git rm ['文件名'] //删除文件
工作文件误删恢复:
(1),只要版本库还在, $ git reset --hard [版本号],恢复
(2), $ git checkou -- [文件名] //撤消对这个文件的命令


*******************远程***********************
要远程托管代码,须要有一个服务器。第三方如:www.github.com 如果只是单纯的托管代码,推荐国内:https://gitee.com/
更多的代码托管平台:https://git.wiki.kernel.org/index.php/GitHosting
1,创建SSH

$ ssh-keygen -t rsa -C "youremail@example.com" //邮箱名可以随意
(将生成 id_rsa.pub(公钥) 和 id_rsa(密钥).复制公密钥全部内容,并在Gighubu新建一个仓库。)
2,推送
https推送:
git remote add <shortName> [远程分支http的url] //添加远程仓库
git push -u origin master //本地远程推送
(切换到要上传代码的本地仓库下,执行。要输入Githubr的帐号密码)
ssh推送:
(这是时候公钥加入github设置的中心里)
或在命令行上创建一个新的存储库
echo“#API”>> README.md
git init
git add README.md
git commit -m“first commit”
git remote add <shortName> [远程分支http的url]
git push -u origin master
...或从命令行推送现有存储库

git remote add <shortName> [远程分支http的url]
git push -u origin master

3,仓库更加详细信息
$git remote show [仓库名]

4,远程推送不成功
网上搜索了下,是因为远程repository和我本地的repository冲突导致的,而我在创建版本库后,在github的版本库页面点击了创建README.md文件的按钮创建了说明文档,但是却没有pull到本地。这样就产生了版本冲突的问题。
有如下几种解决方法:

有如下几种解决方法:

1.使用强制push的方法:

$ git push -u origin master -f

这样会使远程修改丢失,一般是不可取的,尤其是多人协作开发的时候。

2.push前先将远程repository修改pull下来

$ git pull origin master

$ git push -u origin master

3.若不想merge远程和本地修改,可以先创建新的分支:

$ git branch [name]

然后push

$ git push -u origin [name]
************分支*********

注:随着分支的切换,内容也会变换到在相应分支提交的内容
注:关于分支布局与命名规范建议。git 开发保持2个分支:master(主干),develop(开发)
master用于版本号发布(1.0,2.0)。develop用于版本号的开发,在develop又有分支规范feature_[自定义名称](功能分支);预发布(release_*)分支;修补bug(fixbug_*)分支

1,新建一分支并并切换到该分支
$ git branch [分支名] [被复制的分支名,没有默认当前分支复制]
$ git checkout [分支名] //分支切换
($ git checkout -b dev);
git branch -D[分支名] ...删除多个分支
(2)远程新建一个分支
$ git push branch [分支名] //推送本地分支至远程
2,查看分支列表
$ git branch //本地分支列表
$ git branch -a //远程和本地分支列表
3,
4,指定分支合并至当前分支
$ git merge [分支名]
5
6,合并分支
$ git checkout master
$ git merge [分支名]
$ git merge --no-ff -m "merge with no-ff" [分支名] (加入参数合并能在log查看合并的记录)
7,查看合并情况
$ git log --graph --pretty=oneline --abbrev-commit
(2), $ git log --graph (查看分支地图)
8,删除分支
$ git branch -D [分支名
$ git push origin --delete [分支] //远程删除分支
9,保留工作现场
场景:如果你在一个分支工作到一半,要去其它的的分支进行工作,但在这个工作到一半的分支上,你不想提交,因为这样会留下一条“这代码修改到一半还不能用”的没用版本记录。但如果不提交,下次你切换回来你之前的工作就全没了或者覆盖了。怎么办?(这种情况不存在的,系统会让你2选1,要么提交要么保存现场工作才可以去别的分支,哪怕是 $ git checkout -b [分支名] 在这分支再分支,成功的跳过系统的2选1,回来发现系统已经帮你选择保留的选项了。哈哈。还是可以继续之前的工作。)
还是介绍下保留工作现场吧!
$ git stash //保存(完后,status是干净的)
$ git stash list //查看保留的状态
$ git stash pop stash@{状态的编号} //恢复工作状态并删除保存工作的状态
$ git stash drop stash@{状态编号} //删除状态
$ git stash clear //清除所的的工作状态
$ git stash apply stash@{状态编号} //恢复工作状态
10,远程更新
注:操作是将远程的分支与本地合并实现更新
$ git fetch origin master:tmp //将远程仓库master分支拉取到本地的tmp分支。与push相对
$ git diff tmp //比较当前的分支与tmp分支的区别
$ git merge tmp //合并tmp (这样分3步走比pull更保险些)
(2),更新并合并
$ git pull [线上仓库地址,相当于克隆并合并]
11,查看远程仓库数量
$ git remote
$ git remote -v //查看仓库url

12,删除远程仓库
$ git remote rm [仓库]git remote remove repostory

13,修改远程仓库
$ git remote rename [原名] [修改名]
***********标签********************

注:程序完成写是版本号,便于查找识别使用
1,轻量标签
$ git tag vx.x.x
2,附注标签
注:附注标签能携带更多的信息,是个对象,相对于轻量标签可以看作是多了个文本说明。编缉说明程序的作者,邮箱等。
$ git tag -a vx.x.x -m "标题" [分支,不写默认当前分支]
3,标签列表
$ git tag
4,运行指定的版本
$ git tag -l 'vx.x.x'
5,推送远程标签
$ git push --tags //所有的标签
$ git push origin [tagName] //指定标签
6,删除标签
$ git tag -d [tagName] // 删除标签
git push origin --delete tag [tagName] //远程删除标签
7,详情
$ git show <tagname>

***********Git服务器******************
注:相对于第三方代码托管,自己布署的服务器在不交费的情况下不开源。
(其实我也不会,涉及git钩子shell脚本以及ssh服务以及守护进程。
如果学了这么多只是单纯的想不让你的代码开源,我不做。大公司为什么不开源,还不是因为他们的代码太垃圾了,开源就没有人用他们的产品。)
***************帮助文档*****
1,本地文档
$ git --help //输入see also 后面的命令打开相对的帮助文档。文档是html格式.如果默认编缉器打开就取文档的路径以浏览器打开
2,官方帮助文档 https://git-scm.com/book/en/v2


******************************忽略已经提交过的文件***********************************
这里说点题外话,有的时候我们需要忽略掉以前提交过的文件,因为git已经索引了该文件所以我们先要删除掉该文件的缓存,如文件User.php已经提交过了,现在我们想忽略,这是我们先在.gitignore中设置该文件为忽略,然后我们执行如下命令删除缓存

git rm --cached User.php
1
然后我们在commit和push就好了

2 git如何用不同的私钥来同步仓库

在~/.ssh/目录下,生成私钥
$ ssh-keygen -f tmp_rsa # 生成私钥并命名为 tmp_rsa
Generating public/private rsa key pair.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in tmp_rsa
Your public key has been saved in tmp_rsa.pub
The key fingerprint is:
SHA256:lSUO2lFjDEMPFV35qMG+BpqT5zV95pPEvsM+ONWOMTY wuchuheng@Chuhengs-Mac-mini.local
The key's randomart image is:
+---[RSA 3072]----+
| .B=Bo.... |
| o O.=. . |
| . . =. o |
| . o . .|
| S . o. .|
| . o.E+.|
| + .ooB*+|
| = ..o+.@.|
| +.. oo*|
+----[SHA256]-----+
$ ls -ahl
total 4
drwx------ 16 wuchuheng staff 512B Jan 10 12:51 .
drwxr-x---+ 122 wuchuheng staff 3.8K Jan 10 12:51 ..
-rw------- 1 wuchuheng staff 2.6K Jan 10 12:51 tmp_rsa
-rw-r--r-- 1 wuchuheng staff 587B Jan 10 12:51 tmp_rsa.pub
配置~/.ssh/config
Host github.com
IdentityFile ~/.ssh/tmp_rsa

最后把~/.ssh/tmp_rsa.pub提交到gitssh密钥配置中,然后用ssh方式去拉取代码时,就是用tmp_rsa这一私钥。