Git
基础
- .gitignore中指定不需要Git管理的文件
- 不要对公共分支进行rebase
.git目录
- HEAD:保存了当前分支的文件目录路径
- config:保存了local作用域的配置
- refs:该目录存放了本项目所有分支和tag相关的信息
- objects:该目录
对象
git cat-file -t [hashcode]查看对象的类型
git cat-file -p [hashcode] 查看对象的内容
commit
tree
- 文件目录对象
blob
- 文件对象
- 对象的内容就是文件的内容
Git命令
git config --list //查看所有配置
git config --add --local <key> <value> //对当前仓库进行配置
git config --get <key> //获取配置值
git config --global //全局配置
git init //将已有项目加入git管理
git init myProject //创建myProject文件夹,并把它纳入GIT管理
git add [filename] //将文件或文件的改动纳入git管理
git add -u // 将所有修改添加到暂存区等待被提交
git mv file1 file2 //重命名文件
git rm <filename> //将文件从暂存区和工作区删除
git log --oneline //简洁地浏览变更历史
git log --all //查看所有分支的变更历史
git log --graph //增加分支视图
git checkout <branchName> //切换分支
git checkout -- [filename] //将工作区的修改撤销,恢复成和暂存区一致
git checkout -b <branch_name> <remote_repo> // 在本地仓库创建和远端仓库一样的分支,并关联起来,同时切换到该分支
git cat-file -t [hashcode] //查看对象的类型
git cat-file -p [hashcode] //查看对象的内容
git diff [commit1] [commit2] //比较两个commit之间的差异
git diff <分支1> <分支2> //比较分支1和分支2的差异
git diff //比较工作区和暂存区的差异
git diff -- [filename] //比较指定文件在工作区和暂存区的差异
git diff --cached //比较暂存区和HEAD的差异
git reset HEAD //将暂存区的修改撤销,恢复成和HEAD一致
git reset HEAD -- <filename> //将暂存区指定文件的修改撤销,恢复成和HEAD一致
git reset --hard <hashcode> //将hashcode之前的commit全部撤销,暂存区和工作区的相关记录也会同时被撤销,很危险的操作
git branch -d [branchName] //删除一个已经合并的分支
git branch -D [branchName] //强制删除一个分支,不管它是否已经合并
git commit --amend //修改上一次提交的变更说明
git commit -am //提交所有修改
git rebase -i [hashCode] //在该commit上进行重新奠基,其中,pick:保持该提交不变 reword:修改该提交的变更说明 squash:把该提交合并到上一次提交中
git rebase --abort //丢弃掉未完成的rebase操作
git stash //将当前暂存区的修改清空放到一个缓存堆栈中,有需要再恢复出来
git stash pop //将缓存堆栈中的修改恢复到暂存区,同时删除堆栈中该条记录
git stash apply //将缓存堆栈中的修改恢复到暂存区,但不删除堆栈中该条记录
git stash list //查看缓存堆栈中的记录
git clone <projectUrl/.git> <backupname.git> //将git项目备份到本地
git clone --bare <projectUrl/.git> <backupname.git> //将git项目备份到本地,不覆盖工作区
git remote -v //查看远端仓库
git remote add <remote_repo_name> <url> //添加远端仓库
git push origin <local>:<remote> //把本地修改提交到远端
git push <remote_repo_name> //把本地修改推到远端仓库
git push -f origin master //把远程分支强制回退到当前时间点
git pull //把远端分支的修改拉下来,并更新本地分支,包含了fetch和merge两个操作
git fetch //从远端拉去代码到本地
git merge <分支1> <分支2> //合并分支
git merge <远端分支> //合并远端分支
GitHub
- 权限设置:Settings->Branches->Add rule
三种Pull Request的区别
- GitHub的Setting设置中有一个Merge button选项,用于设置允许的分支合并类型,一共有如下三种类型:
- merge commits:将分支合并到主干中,类似于执行git merge命令
- squash merging:将分支的所有改动合并成一个并合并到主干中,合并后分支的状态不变
- rebase merging:将分支的所有改动合并到主干中,合并后分支的状态不变