参考文档        git基本使用   点击->git教程<--   git 常用命令参考

  • 简单了解Git 
    有了它你就可以将某个文件回溯到之前的状态,甚至将整个项目都回退到过去某个时间点的状态,你可以比较文件的变化细节,查出最后是谁修改了哪个地方,从而找出导致怪异问题出现的原因,又是谁在何时报告了某个功能缺陷等等。使用版本控制系统通常还意味着,就算你乱来一气把整个项目中的文件改的改删的删,你也照样可以轻松恢复到原先的样子。 但额外增加的工作量却微乎其微。
  • 本地版本控制系统

许多人习惯用复制整个项目目录的方式来保存不同的版本,或许还会改名加上备份时间以示区别。 这么做唯一的好处就是简单,但是特别容易犯错。 有时候会混淆所在的工作目录,一不小心会写错文件或者覆盖意想外的文件。

  • 集中化版本控制系统
    可以让在不同系统上的开发者协同工作,有一个单一的集中管理的服务器,保存所有文件的修订版本,而协同工作的人们都通过客户端连到这台服务器,取出最新的文件或者提交更新。这种做法带来了许多好处,每个人都可以在一定程度上看到项目中的其他人正在做些什么。 而管理员也可以轻松掌控每个开发者的权限,并且管理一个 CVCS 要远比在各个客户端上维护本地数据库来得轻松容易。缺点是中央服务器的单点故障。 如果宕机一小时,那么在这一小时内,谁都无法提交更新,也就无法协同工作。 如果中心数据库所在的磁盘发生损坏,又没有做恰当备份,毫无疑问你将丢失所有数据。
  • 分布式版本控制系统
    客户端并不只提取最新版本的文件快照,而是把代码仓库完整地镜像下来。 这么一来,任何一处协同工作用的服务器发生故障,事后都可以用任何一个镜像出来的本地仓库恢复。 因为每一次的克隆操作,实际上都是一次对代码仓库的完整备份。
  1. 直接记录快照,而非差异比较
  2. 近乎所有操作都是本地执行
  3. Git 保证完整性

Git 有三种状态,你的文件可能处于其中之一:已提交(committed)、已修改(modified)和已暂存(staged)。 已提交表示数据已经安全的保存在本地数据库中。 已修改表示修改了文件,但还没保存到数据库中。 已暂存表示对一个已修改文件的当前版本做了标记,使之包含在下次提交的快照中。

基本的 Git 工作流程如下:

  1. 在工作目录中修改文件。

  2. 暂存文件,将文件的快照放入暂存区域。

  3. 提交更新,找到暂存区域的文件,将快照永久性存储到 Git 仓库目录。

如果 Git 目录中保存着的特定版本文件,就属于已提交状态。 如果作了修改并已放入暂存区域,就属于已暂存状态。 如果自上次取出后,作了修改但还没有放到暂存区域,就是已修改状态。

Git常用命令:

  1. git init     初始化
  2. git status      查看文件状态
  3. git  add .        追踪文件,把文件添加到暂存区
  4. git  commit -m '注释'        把暂存区的文件提交到本地的版本库中
  5. git remote add origin  https://github.com/neglect/test.git         建立本地仓库和远程仓库的连接,origin是远程仓库的别名,远程仓库的地址是 https://github.com/neglect/test.git 在GitHub上创建的仓库。
  6. git  push -u origin master          把本地版本库中的文件推送到服务器版本库中,-u 是本地分支和远程分支关联(如果远程仓库没有这个分支则会创建)(一个分支关联一次就不需要再加-u) ,master 是版本库的一个分支。版本库理解成一个目录的话,那么分支可以认为是该目录下的一个子目录。
  7. ssh-keygen  -t   rsa  -c  "github的邮箱"              执行此命令前需要先查看是否已经有ssh密钥 cd  ~/.sh(Linux) cd  C:\Users\fb (Windows)查看是否有.ssh目录有则备份后删除(fb是用户名,如果是管理员则是administrator)执行命令后,会生成公钥和私钥,id_rsa.pub 文件里的字符串就是公钥。

    在GitHub里创建文件如上图,然后把字符串复制进去即可。这样就不需要每次  git  push的时候输入用户名和密码了。

  8. git config --global user.name "yourname"
    git config --global user.email "youremail"
  9. git log    查看项目的日志    git  log <file>      查看指定文件的日志    git  log .  查看当前目录的日志
  10. git log -p -1      #查看最近1次的文件变更  -2 就是倒数第二次的
  11. git  reset  --hard  ^              回退到上一个版本    git reset --hard  ^^   回退到上上个版本,以此类推
  12. git  reset  --hard  索引ID               即可回退到指定版本,索引ID是在  git  log 的时候会显示的。
  13. git  branch           查看有哪些分支
  14. git  branch  abc          就创建了一个abc分支
  15. git  checkout  abc      切换到abc分支
  16. git merge origin/abc           如果你当前是在master分支,输入这条命令,就会把abc分支合并到master分支。
  17. git fetch             查看服务器版本库哪些分支更新了
  18. git  diff                查看合并后的代码是否有冲突
  19. git  remote  -v     查看你要指向的远程repository
  20. git add 撤销文件: git reset HEAD 撤销上一次add的全部文件,  git reset HEAD  XXX/XXX/XXX.java   撤销指定的上一次添加的文件
  21. git add 相关参数

    git add .                               提交被修改的和新建的文件,但不包括被删除的文件                            

    git add -u     --update          update tracked files    更新所有改变的文件,即提交所有变化的文件

    git add -A    --all                  add changes from all tracked and untracked files   提交已被修改和已被删除文件,但是不包括新的文件

  22. git clone -b 分支   地址        clone远程仓库指定分支的内容
  23. git  remote  -v                    查看当前项目的远程地址,是否正确
  24. git  remote  set-url  origin  远程仓库地址                       修改origin对应的远程仓库地址
  25. git  branch                        查看本地分支                   git   branch   -a           查看远程所有分支列表 (删除的也还会显示出来)  (绿色表示当前项目所在分支,红色表示远程分支列表)
  26. git show commit_id       查看commit内容 
  27. git  在Windows、Linux都可以使用。不要在线上服务器使用push, 线上服务器只使用pull , 把代码拉倒服务器上即可。安全。
  28. 原则上是不同目的的修改是放在不同的 commit 里的,修改一个功能做一次commit,如果针对不同功能进行commit,分多次提交,以后版本回退方便,修改不同功能一次性提交以后可能也会有未知麻烦。注释尽可能清晰,描述清楚。  
  29. 可参考的文章:https://blog.csdn.net/baimafujinji/article/details/79597654
  30.  .gitignore      https://www.jianshu.com/p/74bd0ceb6182