Skip to content

Git是分布式代码托管的标杆,这里将提供如何学习Git,以及Git工作流的总结,和常用的操作命令。 @anarkh

  • 工具详解 - Git 详解
  • 必读
  • 常用小结
  • Git操作流程
  • 代码提交和同步代码
  • 代码撤销和撤销同步
  • Git常用操作命令 - 代码提交和同步代码
  • Git常用操作命令 - 代码撤销和撤销同步
  • 已修改,但未暂存
  • 已暂存,未提交
  • 已提交,未推送
  • 已推送到远程
  • Git常用操作命令 - 其它常用命令
  • 关联远程仓库
  • 切换分支
  • 撤销操作
  • 版本回退与前进
  • 配置属于你的Git
  • gitignore
  • 使用Gource生成版本记录视频

必读

如果要问一本就可以学习Git的书或者文章,毫无疑问我会推荐Git Pro2,绝对是良心之作啊

常用小结

读完Git Pro2, 大部分功能适合在使用的时候作为工具来参考,最需要理解的是常用的命令对应的workflow,以及分支管理和合并操作。

Git操作流程

代码提交和同步代码

代码撤销和撤销同步

Git常用操作命令 - 代码提交和同步代码

  • 第零步: 工作区与仓库保持一致
  • 第一步: 文件增删改,变为已修改状态
  • 第二步: git add ,变为已暂存状态
bash
$ git status
$ git add --all 
$ git add .  
$ git add xx/xx.py xx/xx2.py
  • 第三步: git commit,变为已提交状态
bash
$ git commit -m"<这里写commit的描述>"
  • 第四步: git push,变为已推送状态
bash
$ git push -u origin master 
$ git push 
$ git branch 
$ git branch -a

在某个分支下,我最常用的操作如下

bash
$ git status
$ git add -a
$ git status
$ git commit -m 'xxx'
$ git pull --rebase
$ git push origin xxbranch

Git常用操作命令 - 代码撤销和撤销同步

已修改,但未暂存

bash
$ git diff 
$ git diff xx/xx.py xx/xx2.py 

$ git checkout 
$ git checkout . 
$ git checkout xx/xx.py xx/xx2.py 
$ git clean -f 
$ git clean -df

已暂存,未提交

这个时候已经执行过git add,但未执行git commit,但是用git diff已经看不到任何修改。 因为git diff检查的是工作区与暂存区之间的差异。

bash
$ git diff --cached 

$ git reset 
$ git reset --soft 
$ git reset --hard

git reset --hard 操作等价于 git reset 和 git checkout 2步操作

已提交,未推送

执行完commit之后,会在仓库中生成一个版本号(hash值),标志这次提交。之后任何时候,都可以借助这个hash值回退到这次提交。

bash
$ git diff <branch-name1> <branch-name2> 
$ git diff master origin/master 

$ git reset --hard origin/master 
$ git reset --hard HEAD^ 
$ git reset --hard <hash code> 
$ git reset --soft/git reset

已推送到远程

java
$ git push -f orgin master # 强制覆盖远程分支
$ git push -f # 如果之前已经用 -u 关联过,则可省略分支名

慎用,一般情况下,本地分支比远程要新,所以可以直接推送到远程,但有时推送到远程后发现有问题,进行了版本回退,旧版本或者分叉版本推送到远程,需要添加 -f参数,表示强制覆盖。

Git常用操作命令 - 其它常用命令

关联远程仓库

  • 如果还没有Git仓库,你需要
bash
$ git init
  • 如果你想关联远程仓库
bash
$ git remote add <name> <git-repo-url>
  • 如果你想关联多个远程仓库
bash
$ git remote add <name> <another-git-repo-url>
  • 忘了关联了哪些仓库或者地址
bash
$ git remote -v
  • 如果远程有仓库,你需要clone到本地
bash
$ git clone <git-repo-url>
  • 如果你想把别人仓库的地址改为自己的
bash
$ git remote set-url origin <your-git-url>

切换分支

新建仓库后,默认生成了master分支

  • 如果你想新建分支并切换
bash
$ git checkout -b <new-branch-name>
  • 看看当前有哪些分支
bash
$ git branch
  • 看看当前本地&远程有哪些分支
bash
$ git branch -a
  • 切换到现有的分支
bash
$ git checkout master
  • 你想把dev分支合并到master分支
bash
$ git merge <branch-name>
  • 你想把本地master分支推送到远程去
bash
$ git push origin master
  • 远程分支被别人更新了,你需要更新代码
bash
$ git pull origin <branch-name>
  • 本地有修改,能不能先git pull
bash
$ git stash 
$ git pull  
$ git stash pop

撤销操作

  • 恢复暂存区文件到工作区
bash
$ git checkout <file-name>
  • 恢复暂存区的所有文件到工作区
bash
$ git checkout .
  • 重置暂存区的某文件,与上一次commit保持一致,但工作区不变
bash
$ git reset <file-name>
  • 重置暂存区与工作区,与上一次commit保持一致
bash
$ git reset --hard <file-name>
  • 去掉某个commit
bash
$ git revert <commit-hash>
  • reset回退错误恢复
bash
$ git reflog 
$ git reset --hard HEAD{5} 
$ git pull origin backend-log

版本回退与前进

  • 查看历史版本
bash
$ git log
  • 你可能觉得这样的log不好看,试试这个
bash
$ git log --graph --decorate --abbrev-commit --all
  • 检出到任意版本
bash
$ git checkout a5d88ea
  • 远程仓库的版本很新,但是你还是想用老版本覆盖
bash
$ git push origin master --force
  • 觉得commit太多了? 多个commit合并为1个
bash
$ git rebase -i HEAD~4
  • 想回退到某一个版本
bash
$ git reset --hard <hash>
  • 想回退到上一个版本,有没有简便方法?
bash
$ git reset --hard HEAD^
  • 回退到上上个版本呢?
bash
$ git reset --hard HEAD^^
  • 回退错了,能不能前进呀
bash
$ git reflog
  • 刚才commit信息写错了,可以修改吗
bash
$ git commit --amend
  • 看看当前状态吧
bash
$ git status

配置属于你的Git

  • 看看当前的配置
bash
$ git config --list
  • 估计你需要配置你的名字
bash
$ git config --global user.name "<name>"
  • 希望别人看到你的commit可以联系到你
bash
$ git config --global user.email "<email address>"
  • 有些命令很长,能不能简化一下
bash
$ git config --global alias.logg "log --graph --decorate --abbrev-commit --all"

gitignore

Git 忽略提交 .gitignore在新窗口打开

使用Gource生成版本记录视频