文章目录
1. git基本使用
常用git命令,参考:Git 大全
学习git,参考:廖雪峰的官方网站-Git教程
1.1. Git和GitHub、Gitee的区别
- Git:宽泛的说,Git是目前世界上最先进的分布式版本控制系统。与常用的版本控制工具 CVS, Subversion 等不同,它采用了分布式版本库的方式,不必服务器端软件支持(这得分是用什么样的服务端,使用http协议或者git协议等不太一样。并且在push和pull的时候和服务器端还是有交互的。),使源代码的发布和交流极其方便。 Git 的速度很快,这对于大项目来说自然很重要。 Git 最为出色的是它的合并跟踪(merge tracing)能力(即分支功能)
- GitHub:gitHub是一个面向开源及私有软件项目的托管平台。作为免费的远程仓库,因为只支持git 作为唯一的版本库格式进行托管,故名gitHub。
- gitee(码云)同GitHub,不过Gitee是国内的,速度较快
1.2. 上传项目
- 打开文件夹(假设project),这个文件夹将作为工作区(Working Directory)存在
- 在文件夹右键,“Git BASH Here”或者使用cmd(linux下当然不是cmd了)将路径修改至目标文件夹
- 执行
git init
。执行完成后这时你会发现project里面多了个.git文件夹(这个不算工作区,而是Git的版本库(Repository)),它是Git用来跟踪和管理版本库的。如果看不到,是因为它默认是隐藏文件,需要设置一下让隐藏文件可见。这时,git自动为我们创建了唯一一个master分支 - 使用
git status
查看当前状态 - 编写.gitignore文件(如果没有,手动创建),忽略不想上传的文件
- 再次使用
git status
查看上传文件列表,若不合要求,则再次修改,直到符合要求为止 - 使用
git add
,添加至暂存区 - 使用
git commit -m '注释'
,将暂存区内容提交至当前分支 - 上边两步可以合并,使用
git commit -am '注释'
- git的ssh key等配置相关设置
- GitHub账号,以及ssh key等相关设置
- 在Github上创建好Git仓库之后,就可以和本地仓库进行关联。如:
git remote add origin git@gitee.com:lihhz/node-test.git
(这里用的是码云的ssh) git push -u origin master
。-u:初次上传需要使用,表示--set-upstream
。- 如果报错
error:failed to push ...
,执行git pull origin master
拉取一下 - 如果再报错
refusing to marge unlated histories
,则修改命令为git pull --allow-unlated-histories origin master
- 解决完报错后,
git push -u origin master
(初次需要-u,以后就不需要了) - 如果需要查看提交日志
git log
,可以加上参数--pretty=oneline
这样每条记录将显示在一行内
2. 问题
2.1. 中文文件名问题
在Git Bash
中,如果操作中文文件名的文件,可能会找不到文件,这个时候需要在命令中的文件名前后加上"
2.2. 冲突解决
暂无
2.3. 怎么撤销修改
几种情况:
- 尚未使用
git add
- 使用了
git add
,还没有git commit
- 使用了
git commit
,还没有git push
- 使用了
git push
2.3.1. 尚未使用git add
- 手动修改文件至原始状态
- 使用
git checkout -- 文件名称
。注意,一定要有--
,否则就成了切换branch;还有就是--
和文件名称之间要有空格,如果是中文文件名,在文件名称前后加"
命令`git checkout -- readme.txt`意思就是,把`readme.txt`文件在工作区的修改全部撤销,这里有两种情况:
一种是`readme.txt`自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;
一种是`readme.txt`已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。
总之,就是让这个文件回到最近一次git commit或git add时的状态。
2.3.2. 使用了git add
git reset HEAD readme.txt
使用了git reset HEAD 文件名
后,相当于把修改后的文件从暂存区拿出来,重新放入工作区。如果还需要将工作区的修改撤销,则使用命令git checkout -- 文件名
`git reset`命令既可以回退版本,也可以把暂存区的修改回退到工作区。当我们用HEAD时,表示最新的版本。
2.3.3. 使用了git commit
参考:版本回退
使用了git commit
意为着已经提交到版本库了,只是在远程仓库还不存在而已。这个时候需要的不是撤销操作,而是版本回退了。
版本回退步骤
- 使用命令
git log [--pretty=oneline]
查看历史版本 - 使用命令
git reset --hard HEAD^
回退到上一个版本,命令参数解释如下- HEAD^的意思是上一个版本,也可以写成HEAD~1;如果你进行了2次commit,想都撤回,可以使用HEAD~2
- –mixed : 意思是:不删除工作空间改动代码,撤销
commit
,并且撤销git add
. 操作。这个为默认参数git reset --mixed HEAD^
和git reset HEAD^
效果是一样的。 - –soft :不删除工作空间改动代码,撤销
commit
,不撤销git add
. - –hard:删除工作空间改动代码,撤销
commit
,撤销git add
. 注意完成这个操作后,就恢复到了上一次的commit状态。
2.4. ssh和https
https每次上传都要提示用户名密码,很烦
2.5. 使用码云
参考:廖雪峰的官方网站 - 使用码云
码云上创建账号、上传ssh key 、新建仓库等
2.6. git修改提交的注释内容
amend 英[əˈmend] 美[əˈmɛnd]
vt. 修订; 改良,修改;
Git已经commit的log修改
1.输入命令:git commit --amend
2.修改最近提交的message,提交的注释都在最上面,输入:q 退出vim编辑器
3.查看是否修改成功:git log
4.修改成功后,提交远程:
git push <remote> <branch> --force
# Or
git push <remote> <branch> -f
5.查看远程库,修改成功
2.7. 查看未提交或者未push到远程
git status ##只能查看未传送提交的次数
git cherry -v ##只能查看未传送提交的描述/说明
git log master ^origin/master ##则可以查看未传送提交的详细信息
2.8. 注
Github上仓库和本地仓库关联方法(命令行):
git remote add origin https://github.com/guyibang/TEST2.git
其中https://github.com/guyibang/TEST2.git
就是Github上册仓库地址
-
Git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区,还有Git为我们自动创建的第一个分支master,以及指向master的一个指针叫HEAD。
-
我们把文件往Git版本库里添加的时候,是分两步执行的:
- 第一步是用
git add
把文件添加进去,实际上就是把文件修改添加到暂存区; - 第二步是用
git commit
提交更改,实际上就是把暂存区的所有内容提交到当前分支。
因为我们创建Git版本库时,Git自动为我们创建了唯一一个master分支,所以,现在,git commit就是往master分支上提交更改。
你可以简单理解为,需要提交的文件修改通通放到暂存区,然后,一次性提交暂存区的所有修改。
- 第一步是用