来源:极客时间
作者:unaheidi
62节视频课。还是版本控制工具的图形化界面更好啊~
cvs -> svn -> git/github/gitlab
cmd:git --version
账户配置:
git config --global user.name ‘your_name’
git config --global user.email ‘your_email’
git log 查看版本演变历史
gitk 图形界面工具
基于commit的变更,分离头指针情况下保存的话,要关联branch
删除分支:
git branch -D 分支名
修改最新commit的message:
git commit --amend
修改之前commit的message:
git rebase -i 父commit的哈希值
把多个连续的commit整合为1个:
git rebase -i 多个合并commit最顶层的哈希值
把多个间隔的commit整合为1个:
git rebase -i 需要合并到的commit的哈希值
工作区 -> 暂存区 -> HEAD
暂存区和Head的文件差异:
git diff --cached
暂存区和工作区的文件差异:
git diff
仅显示暂存区和工作区的某几个文件的差异:
git diff – 文件名1 文件名2 文件名n
恢复暂存区所有文件与HEAD一致:
git reset HEAD
恢复工作区的文件为和暂存区一样(还原??):
git checkout – 文件名1 文件名2 文件名n
取消暂存区部分文件的更改:
git reset HEAD – 文件名1 文件名n
消除最近的几次提交(还原到此版本??):
git reset --hard 还原到的commit的哈希值
查看不同提交的指定文件的差异:
git diff 分支1名 分支2名 (会列出所有文件的差异)
git diff 分支1名 分支2名 – 文件名1 文件名n (会列出指定的文件的差异)
删除文件的方法:
git rm 文件名
开发中临时加塞紧急任务(贮藏变更??):
git stash (贮藏)
git stash pop (弹出贮藏,但不保存贮藏)
git stash apply (应用贮藏,但仍保存贮藏)
指定不需要git管理的文件(.gitignore):
*.meta (所有的.meta文件)
obj (obj文件夹下的所有子文件夹及文件)
ps:在github新建一个仓库的时候,Add.gitignore可以选择对应语言和框架的配置(没有C#!!)
常用协议:
http/https http://github.com/itsxwz/UnityFramework
ssh git@git.com:itswxz/UnityFramework.git
将git仓库备份到本地:
git clone --bare (不带工作区)git地址
基于远端分支创建一个本地分支并切换到这个分支:
git checkout -b feature/add_git_commands origin/feature/add_git_commands
拉取远端中尚未拉取到本地的分支:
git fetch 项目名
每天做新的开发之前把主分支先拉取下来
pull = fetch + merge
不同人修改了不同文件、不同人修改同文件的不同区域,git可以自动合并
不同人对同一文件同一区域做了修改:
git commit (修改好了就提交)
git merge --abort (不想要了就丢弃)
A改了文件名
B改了文件内容
A提交了
B提交了:报错
B pull
git会自动处理为新的文件名并且把保存B修改的文件内容
多人对同一文件名进行修改,会创建多份相同文件内容的文件,删除原始文件
删除某个分支的初始commit之后的提交:
git push -f origin feature/add_git_commands
不要对集成分支(主分支)做rebase,应该把自己的本地分支rebase到主分支再继续做开发
git搜索的技巧:
git学习资料 in:readme stars:>1000
https://github.com/search/advanced (采用高级搜索)
使用jekyll-now搭建blog在github上
repo打tag就是创建一个当前的版本标记,会保存当前的源代码为压缩包
主干开发:团队系统设计和开发能力强,有一套有效的特性切换的实施机制,保证上线后无需修改代码就能够修改系统行为。
GitLab Flow:不具备主干开发能力,无法控制准确的发布时间,但又要求不停地集成。