一、工作流程
- 克隆 Git 资源作为工作目录。
- 在克隆的资源上添加或修改文件。
- 如果其他人修改了,你可以更新资源。
- 在提交前查看修改。
- 提交修改。
- 在修改完成后,如果发现错误,可以撤回提交并再次修改并提交。
二、基本操作
1.查看修改状态 status
【git status】查看在你上次提交之后是否有修改
2.添加到缓存区 add
【git add <file>】将某文件添加到缓存区
【git add .】将全部文件添加到缓存区
3.将缓存区内容添加到本地仓库 commit
【git commit -m '提交信息'】
4.查看差异 diff
【git diff】尚未缓存的改动(git add之前)
【git diff --stat】摘要显示改动,没有详细内容
【git diff --cached】查看已缓存的改动(git add之前,但是还没有git commit)
【git diff HEAD^】显示上一次提交之前工作目录与git仓库之间的差异
git pull之后查看拉下来的文件有那些修改
【git diff <branch>】查看指定分支和当前分支的差异
【git diff <branch1> <branch2> --stat】摘要显示出所有文件的差异
三、分支管理
1.创建分支
【git branch <branchName>】创建分支
2.切换分支
【git checkout <branchName>】切换到指定分支
【git checkout -b <branchName>】创建并切换到新分支
3.查看分支
【git branch】查看本地分支
【git branch -r】查看远程分支
【git branch -a】查看本地分支和远程分支
【git branch -av】查看本地和远程分支及提交记录
4.合并分支
【git merge <branch>】将指定分支合并到当前分支(合并完需要push到远程)
5.删除分支
【git branch -d <branch>】删除本地分支,如果该本地分支未曾合并会报错
【git branch -D <branch>】强制删除本地分支
【git push origin --delete <branch>】删除远程分支
【git fetch -p】清理本地无效分支(远程已删除本地没删除的分支) ,更新本地分支与远程的对应关系
四、代码撤销和回滚
撤销:在未执行git push前的所有操作,都是在“本地仓库”中执行的。我们暂且将没有git push(推送)到远程仓库的代码还原操作叫做“撤销”。
回滚:我们将已经git push(推送)到“远程仓库”的代码还原操作叫做“回滚”。注意:对远程仓库做回滚操作是有风险的,需提前做好备份和通知其他团队成员。
1.撤销工作区代码 (git add 之前)
【git checkout --<file>】 丢弃某个文件
【git checkout .】 丢弃全部(新增的文件会被删除、删除的文件会恢复回来、修改的文件会改回去)
【git restore <file>】丢弃某个文件
【git resetore .】丢弃全部
2.撤销暂存区代码 (代码git add到缓存区,并未commit提交)
【git resetore <file>】将某文件从暂存区撤出,但不会更改文件(修改的文件不会改回去)
【git restore --staged *.js】 将所有js文件从暂存区撤出,但不会更改文件
【git restore --staged . 】将暂存区的所有件从暂存区撤出,但不会更改文件
3.撤销commit到本地分支、但没有push到远程的代码
方法一
【git log】得到你需要回退一次提交的commit id
【git reset --hard <commit_id>】回退到你想要的某个版本
方法二
【git reset --hard HEAD^】回到最新的一次提交
方法三
【git reset HEAD^】此时代码保留,回到 git add 之前
4.撤销已经push到远程的代码(代码回滚)
方法一:回滚某次提交reset
【git log】显示所有提交过的版本信息
【git reset --hard <commit_id>】回退到你想要的某个版本
【git push origin HEAD --force】强制提交一次,之前错误的提交就从远程仓库删除
方法二:回滚某次提交revert
【git reflog】查看所有分支的所有操作记录
【git revert <commit_id>】撤销指定的版本,撤销也会作为一次提交进行保存
5.回滚:删除最后一次远程提交
方法一
【git revert HEAD】删除最后一次远程提交
【git push origin <branch>】
方法二
【git reset --hard HEAD^】回退到上个版本
【git push origin <branch> -f】强制提交一次,之前错误的提交就从远程仓库删除
二者区别:
revert是放弃指定提交的修改,但是会生成一次新的提交,需要填写提交注释,以前的历史记录都在;
reset是指将HEAD指针指到指定提交,历史记录中不会出现放弃的提交记录。
6.回滚:回滚到指定版本
【git log】查看所有提交过commit的版本信息
【git reset --hard CommitId】回退到指定CommitId的版本
【git push origin <branch> -f】强制提交到远程
五、日志
1.git reflog 查看提交记录
reflog 查看所有分支的所有操作记录,(包括已经被删除的commit记录和reset的操作)。
例如:
执行【git reset --hard HEAD~1】退回到上一个版本,
用git log则是看不出来被删除的commit_id,
用git reflog则可以看到被删除的commit_id,恢复到被删除的那个版本。
2.git log 查看提交历史
【git log】查看所有提交过commit的版本信息
【git log <file>】查看指定文件的历史版本
【git log --merges】查看合并提交历史
【git log --author=xiaoming】查看指定作者的提交历史
【git log --graph --oneline --decorate】单行显示提交历史
--oneline 单行显示
--graph 显示结构树
--decorate 显示指向分支(HEAD指针)
六、SSH配置和使用
- 输入cd ~/.ssh可以查看是否已配置SSH。
- 设置Git的user name和email:(如果是第一次的话)
- 输入 git config --global user.name "humingx"
- 输入 git config --global user.email "humingx@yeah.net"
- 生成密钥
- 输入 ssh-keygen -t rsa -C "xiaoming@gongsi.com"
- 连续3个回车。如果不需要密码的话。
- 最后得到了两个文件:id_rsa和id_rsa.pub。
- 添加密钥到ssh-agent
- 输入 eval "$(ssh-agent -s)"
- 输入 ssh-add ~/.ssh/id_rsa
- 登陆Github, 添加ssh
- 把id_rsa.pub文件里的内容复制到Bitbucket-安全-SSH密钥中
七、标签
1.创建标签
【git tag <tagname>】创建一个标签 // $ git tag v1.0.0
2.上传标签到远程
- 推送单个 tag:
【git push origin 】
// $ git push origin v1.0.8 - 一次推送所有本地 tag: 【git push origin --tags】
3.查看标签列表
【git tag】
4.删除标签
使用 git tag -d <tagname> 删除本地仓库上的标签:
$ git tag -d v1.0.9
已删除标签 'v1.0.9'(曾为 fb8fd3e)
然后用 git push <remote> :refs/tags/<tagname> 更新远程仓库:
$ git push origin :refs/tags/v1.0.9
To github.com:hellomrbigshot/react-m-editor.git
- [deleted] v1.0.9
或者直接用 git push origin --delete <tagname> 直接删除远程标签:
$ git push origin --delete v1.0.7
To github.com:hellomrbigshot/react-m-editor.git
- [deleted] v1.0.7
然后同步到本地
$ git fetch --prune --prune-tags
注意:
git fetch --prune --prune-tags会强制同步远程 tag 到本地,所以会导致本地新建的未提交到远程服务器的 tag 也会被删除。