GIT代码管理总结

Git 是目前世界上最先进的分布式版本控制系统(没有之一),是一个开源的分布式版本控制系统。解决多人协作开发时代码管理的问题。

四个区

工作区: 本地的工作台,对于添加、修改、删除文件的操作,都发生在工作区中
暂存区: 暂存区指将工作区中的操作完成小阶段的存储,是版本库的一部分
本地仓库: 仓库区表示个人开发的一个小阶段的完成
远程仓库: 线上的仓库,如GitLab

常用的命令
  • 由工作区存放到暂存区

    # 把指定的文件添加到暂存区中
    $ git add <文件路径>
    
    # 添加所有修改、已删除的文件到暂存区中
    $ git add -u [<文件路径>]
    $ git add --update [<文件路径>]
    
    # 添加所有修改、已删除、新增的文件到暂存区中,省略 <文件路径> 即为当前目录
    $ git add -A [<文件路径>]
    $ git add --all [<文件路径>]
    
    # 查看所有修改、已删除但没有提交的文件,进入一个子命令系统
    $ git add -i [<文件路径>]
    $ git add --interactive [<文件路径>]
  • 由暂存区存放到本地仓库

    # 把暂存区中的文件提交到本地仓库,调用文本编辑器输入该次提交的描述信息
    $ git commit
    
    # 把暂存区中的文件提交到本地仓库中并添加描述信息
    $ git commit -m "<提交的描述信息>"
    
    # 把所有修改、已删除的文件提交到本地仓库中
    # 不包括未被版本库跟踪的文件,等同于先调用了 "git add -u"
    $ git commit -a -m "<提交的描述信息>"
    
    # 修改上次提交的描述信息
    $ git commit --amend
  • 将本地仓库的分支推送到远程仓库的指定分支

    # 把本地仓库的分支推送到远程仓库的指定分支
    $ git push <远程仓库的别名> <本地分支名>:<远程分支名>
    
    # 删除指定的远程仓库的分支
    $ git push <远程仓库的别名> :<远程分支名>
    $ git push <远程仓库的别名> --delete <远程分支名>
  • 从远程仓库拉取最新版本并合并到本地

    #首先会执行git fetch, 然后会执行git merge
    git pull <远程仓库别名> <远程分支名>
  • 打印日志

    # 打印所有的提交记录,最上面的commit为最新提交
    $ git log
  • 比较各个版本之间的不同

    # 比较当前文件和暂存区中文件的差异,显示没有暂存起来的更改
    $ git diff
    
    # 比较暂存区中的文件和上次提交时的差异
    $ git diff --cached
    $ git diff --staged
    
    # 比较当前文件和上次提交时的差异
    $ git diff HEAD
    
    # 查看从指定的版本之后改动的内容
    $ git diff <commit ID>
    
    # 比较两个分支之间的差异
    $ git diff <分支名称> <分支名称>
    
    # 查看两个分支分开后各自的改动内容
    $ git diff <分支名称>...<分支名称>
  • 还原提交记录

    # 重置暂存区,但文件不受影响
    # 相当于将用 "git add" 命令更新到暂存区的内容撤出暂存区,可以指定文件
    $ git reset <文件路径>
    
    # 将 HEAD 的指向改变,撤销到指定的提交记录,文件未修改
    $ git reset <commit ID>
    $ git reset --mixed <commit ID>
    
    # 将 HEAD 的指向改变,撤销到指定的提交记录,保留工作区的修改
    $ git reset --soft <commit ID>
    
    # 将 HEAD 的指向改变,撤销到指定的提交记录,工作区的修改也没了
    $ git reset --hard <commit ID>
  • 从远程仓库获取最新的版本到本地

    # 将远程仓库指定分支的最新版本取回到本地
    $ git fetch <远程主机名> <分支名>
    
    # 取回更新后,会返回一个FETCH_HEAD ,指的是某个branch在服务器上的最新状态,我们可以在本地通过这个命令查看刚取回的最新代码和本地当前所在分支有什么区别
    $ git log -p FETCH_HEAD
    
    # 如果需要将这个FETCH_HEAD ,更新到当前所在的本地分支,那么可以使用(fetch + merge  相当于pull)
    $ git merge FETCH_HEAD
  • 指定分支合并

    # 把指定的分支合并到当前所在的分支下
    $ git merge <分支名称>
  • 反做版本,撤销某个版本

    # 如果我们想撤销之前的某一版本,但是又想保留该目标版本后面的版本,记录下这整个版本变动流程,就可以用这种方法。
    # 生成一个新的提交来撤销某次提交
    $ git revert -n <commit ID>
    # 注意:这里可能会有代码冲突,那么需要手动修改冲突后重新git add 修改的文件名
    $ git commit -m "反做某个版本"
代码合并冲突解决方案

问题的出现:甲修改了a.py文件,push上去并且合并到master,乙没有从master pull甲修改的最新代码,并且改动了a.py。这时线上合并的时候会出现代码冲突的提示。
解决:乙回到自己的本地分支,git pull origin master 最新的代码鼠标放到a.py里面,就会跳出冲突出现的位置,删掉不需要的代码,再重新push 。再回到线上同一个合并请求处,就会发现可以合并了。