关系图

- Workspace:工作区
- Index/Stage:暂存区
- Repository:本地仓库
- Remote:远程仓库
本地仓库
新建仓库
1 | # 在当前目录新建一个Git仓库 |
配置信息
1 | # 显示配置列表 |

显示工作区和暂存区的状态
1 | $ git status |

添加文件到暂存区
1 | # 添加指定文件到暂存区 |
这里可以看到新添加了一个文件
提交到本地仓库
1 | # 提交暂存区到仓库区,message是每次提交的说明,查看历史记录的时候会显示 |
可以看到在这次提交中,一个文件变动,增加了1行
新增加一个test1.txt,并修改test.txt。然后用–amend替代上一次提交。
查看文件提交纪录
1 | # 显示当前分支的历史版本 |


查看文件变动
1 | # 查看某文件暂存区和工作区的差异 |
这里可以看到test.txt删除了第2行,添加了234567行
把test.txt添加到暂存区,查看修改
撤销工作区的修改
1 | # 恢复暂存区的指定文件到工作区,譬如在工作区修改了test.txt,还没有add,但是现在突然不要这修改了,可以用这个方式撤销 |

撤销暂存区的修改
1 | # 将add的文件撤销到工作区 |
可以看到执行git reset HEAD,之前git add的文件重新回到了工作区
版本回退
1 | # commitId为每次commit的token,可以用git log查看。commitId为空或者为HEAD,为当前版本,即上一次commit的状态 |

查看当前分支的提交纪录
1 | $ git reflog |

远程仓库
从远程仓库克隆
1 | # 从远程仓库克隆 |
本地仓库与远程仓库连接
1 | # 如果已经有本地仓库,想要和远程仓库连接 |
gitee上新建一个仓库的例子
使用fetch从远程仓库拉取代码/查看更新
1 | # 从远程仓库拉取代码,不合并。可用来查看有没有其他人更新 |

使用pull从远程仓库拉取代码
1 | # 从远程仓库拉取代码并合并。如果要拉取的分支与当前分支连接,参数可省略 |

推送代码到远程仓库
1 | # 推送代码到远程仓库。如果要拉取的分支与当前分支连接,参数可省略 |

分支管理
查看分支
1 | # 查看本地分支 |

新建分支
1 | # 新建分支 |
git checkout -b [branch-name]
等价于
git branch [branch-name]
git checkout [branch-name]
从远程仓库拉取分支
1 | # clone下来的新仓库,只有默认分支的代码,如果需要拉取其他分支 |
以程仓库的develop为模板,在本地建立一个dev的分支,并切换到dev分支。
本地分支与远程分支建立追踪关系
1 | $ git branch --set-upstream-to=origin/[remote branch] [branch] |
将本地分支dev与远程分支develop建立连接
切换分支
1 | # 切换到指定分支,并更新工作区 |

删除分支
1 | $ git branch -d [branch] |

删除远程分支
1 | $ git push origin --delete [remote branch] |
删除远程仓库上的develop分支
新建远程分支
1 | # 本地分支与远程分支名称相同 |

查看分支信息
查看git项目是从git的哪个分支上拉下来
1 | $ git remote show origin |

合并分支
1 | # 合并指定分支到当前分支 |

储藏
git stash命令的作用就是将目前还不想提交的但是已经修改的内容进行保存至堆栈中,后续可以在某个分支上恢复出堆栈中的内容。这也就是说,stash中的内容不仅仅可以恢复到原先开发的分支,也可以恢复到其他任意指定的分支上。git stash作用的范围包括工作区和暂存区中的内容,也就是说没有提交的内容都会保存至堆栈中。
应用场景
- 当正在dev分支上开发某个项目,这时项目中出现一个bug,需要紧急修复,但是正在开发的内容只是完成一半,还不想提交,这时可以用git stash命令将修改的内容保存至堆栈区,然后顺利切换到hotfix分支进行bug修复,修复完成后,再次切回到dev分支,从堆栈中恢复刚刚保存的内容。
- 由于疏忽,本应该在dev分支开发的内容,却在master上进行了开发,需要重新切回到dev分支上进行开发,可以用git stash将内容保存至堆栈中,切回到dev分支后,再次恢复内容即可。
git stash
能够将所有未提交的修改(工作区和暂存区)保存至堆栈中,用于后续恢复当前工作目录。
1 | $ git stash |

git stash save
等同于git stash,只是多了注释
1 | $ git stash save [message] |

git stash list
查看当前stash中的内容
1 | $ git stash list |
可以看到之前保存的2个
git stash pop
将当前stash中的内容弹出,并应用到当前分支对应的工作目录上。
注:该命令将堆栈中最近保存的内容删除(栈是先进后出)
1 | $ git stash pop |

git stash apply
将堆栈中的内容应用到当前目录,不同于git stash pop,该命令不会将内容从堆栈中删除,也就说该命令能够将堆栈的内容多次应用到工作目录中,适应于多个分支的情况。
也可以使用git stash apply + stash名字(如stash@{1})指定恢复哪个stash到当前的工作目录。
1 | $ git stash apply |

git stash drop
从堆栈中移除某个指定的stash,不指定删除stash@{0}
1 | $ git stash drop [stash-name] |

git stash clean
清除堆栈中的所有内容
1 | $ git stash clear |
git stash show
查看堆栈中最新保存的stash和当前目录的差异。
1 | $ git stash show |

git stash branch
从最新的stash创建分支,与pop一样,会删除stash。
1 | # 根据最近的stash创建 |

应用场景:当储藏了部分工作,暂时不去理会,继续在当前分支进行开发,后续想将stash中的内容恢复到当前工作目录时,如果是针对同一个文件的修改(即便不是同行数据),那么可能会发生冲突,恢复失败,这里通过创建新的分支来解决。可以用于解决stash中的内容和当前目录的内容发生冲突的情景。
发生冲突时,需手动解决冲突。
标签
列出所有标签
1 | $ git tag |
新建标签
1 | # 在当前commit新建一个tag |

查看标签
1 | $ git show [tag] |

删除本地标签
1 | $ git tag -d [tag] |

推送标签
1 | # 推送指定标签到远程仓库 |

查看远程标签
1 | $ git ls-remote –-tags [remote] |

删除远程标签
1 | # 先删除本地标签 |

冲突
合并分支冲突
新建一个feat分支,修改文件并提交
切换到master分支,同样同一个文件同一行并提交
合并分支时,发现合并冲突了
冲突文件:
Git用<<<<<<<,=======,>>>>>>>标记出不同分支的内容,修改后重新提交。
1 | # 查看分支合并情况 |

本地仓库与远程仓库冲突
如果多人合作,其他人推送了他的提交,刚好你对同一文件做了修改,推送的时候就会有问题。
这时候先用git pull把最新的提交抓下来,在本地合并,解决冲突后再推送。