git教程

340 阅读5分钟

一、工作流程

  • 克隆 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配置和使用

  1. 输入cd ~/.ssh可以查看是否已配置SSH。
  2. 设置Git的user name和email:(如果是第一次的话)
    • 输入 git config --global user.name "humingx"
    • 输入 git config --global user.email "humingx@yeah.net"
  3. 生成密钥
    • 输入 ssh-keygen -t rsa -C "xiaoming@gongsi.com"
    • 连续3个回车。如果不需要密码的话。
    • 最后得到了两个文件:id_rsa和id_rsa.pub。
  4. 添加密钥到ssh-agent
    • 输入 eval "$(ssh-agent -s)"
    • 输入 ssh-add ~/.ssh/id_rsa
  5. 登陆Github, 添加ssh
    • 把id_rsa.pub文件里的内容复制到Bitbucket-安全-SSH密钥中

七、标签

1.创建标签
【git tag <tagname>】创建一个标签  // $ git tag v1.0.0
2.上传标签到远程
  1. 推送单个 tag: 【git push origin 】// $ git push origin v1.0.8
  2. 一次推送所有本地 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 也会被删除。