学习资料:廖雪峰的博客https://www.cnblogs.com/sdcs/p/8270029.html



按ESC键 跳到命令模式(记得打:)

  • :w 保存文件但不退出vi
  • :w file 将修改另外保存到file中,不退出vi
  • :w! 强制保存,不推出vi
  • :wq 保存文件并退出vi
  • :wq! 强制保存文件,并退出vi
  • q: 不保存文件,退出vi
  • :q! 不保存文件,强制退出vi
  • :e! 放弃所有修改,从上次保存文件开始再编辑

 


问题:

warning: LF will be replaced by CRLF in readme.txt.

The file will have its original line endings in your working directory.

问题分析:格式化与多余的空白字符

解决方案:

$ rm -rf .git  // 删除.git  
$ git config --global core.autocrlf false  //禁用自动转换    
$ git init    
$ git add 文件名
$ git commit -m "wrote a readme file"  // -m后面代表注释

版本回退小结

查询修改

  • git log 查询近期修改
  • git log -- pretty=oneline

回到过去 回到未来

  • git reset --hard HEAD~CNT    //CNT代表返回多少次
  • git reset --hard 版本号 // 可以直接确定到达某一个版本,并且版本号要4位以上
  • HEAD指针, 回到过去和回到未来的原理  

暂存区、工作区小结

  • 使用git status显示工作区文件的改变

管理修改小结

  • git diff HEAD -- readme.txt 

撤销修改小结

  • git checkout -- readme.txt  // 当文件还没被放到暂存区,丢弃工作区的修改
  • git status //显示工作区和缓存区的信息
  • git reset 命令既可以回退版本,也可以把暂存区的修改回退到工作区

小结:

  • 场景1:当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令git checkout -- file。
  • 场景2:当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步,第一步用命令git reset HEAD <file>,就回到了场景1,第二步按场景1操作。
  • 场景3:已经提交了不合适的修改到版本库时,想要撤销本次提交,参考版本回退一节,不过前提是没有推送到远程库。

删除文件小结

  • git rm test.txt
  • git commit -m "delete test.txt"

关联GitHub仓库小结

  • git remote add origin git@github.com:Haipai1998/learngit.git  
  • git push -u origin master
  • git push -origin master。第二步骤做过之后,不需要-u了。

远程克隆库小结

  • git clone git@github.com:Haipai1998/gitskills.git
  • 也可以使用http协议

Git分支管理小结

  • 创建与合并分支
    • 查看分支:git branch
    • 创建分支:git branch <name>
    • 切换分支:git checkout <name>
    • 创建+切换分支:git checkout -b <name>
    • 合并某分支到当前分支:git merge <name>  
    • 删除分支:git branch -d <name
    • 强行推送:git push origin dev --force //再推送到远程仓库
  • 解决冲突
    • 若合并后想reset : git reset --merge
    •  git log --graph --pretty=oneline --abbrev-commit 显示分支合并图
    • 总结:
      • 当Git无法自动合并分支时,就必须首先解决冲突。解决冲突后,再提交,合并完成
      • 解决冲突就是把Git合并失败的文件手动编辑为我们希望的内容,再提交
      • 用git log --graph命令可以看到分支合并图
  • 禁用ff
    • git merge --no-ff -m "merge with no-ff" 分支名称
    • 禁用与否区别在于会产生一个新的commit节点???? 不是很清晰
    • 一般开发以master来发布最新版本,在dev上干活
    • 总结:
      • ·合并分支时,加上--no-ff参数就可以用普通模式合并,合并后的历史有分支,能看出来曾经做过合并,而fast forward合并就看不出来曾经做过合并。

退回到上一个comiit ID上去,但是又想把你更改的代码保留

  • git reset --soft commit-id ; git status看哈希值ID
  • 清空本地缓存 git rm -r --cached .
  • git push origin master