一、常用操作
- git clone 仓库地址 克隆仓库
- git branch 分支名字 创建分支
- git checkout 分支名字 切换分支
- git history 查看git操作记录
- git fetch 更新到最新的commit结构
- git rebase -i origin/master 将当前分支基于master上
- git status 查看git状态
- git add 需要添加到暂存区的文件
- git commit -am 需要提交的已经在暂存区的文件的描述
- git commit --amend 需要提交的已经在暂存区的文件的添加提交,对于同一事件的提交
- git reset --hard commit-id 或者origin/master 丢弃本地提交的所有改动和提交,已指定的comit或者最新的master的目录树为指引点
- git reset HEAD filename 取消已缓存的文件,也就是取消git add的操作
- git rm filename 删除暂存区的文件,并且删除工作目录下的文件
- git rm --cached filename 只删除暂存区的文件,工作目录中不删除
- git rm filename -f 删除之前修改过的 并且在暂存区的文件
- git push origin :分支名 删除远端分支,origin与冒号之间有空格
- git branch -D 分支名 删除本地分支
- git show commit-id 查看commit内的文件改动内容
- git push origin 分支名 (-f) 推送改动到远端分支,加-f为推动的本地分支完全覆盖远端分支
- git push origingit push origin liurong:master 将本地分支的pr动最终合并到远端master上
- git rebase -i HEAD~3 修改最新的3个commit web远端删除分支后本地依旧存在,
- 使用git remote show origin 查看远程库与本地库的关系
- 使用git remote prune origin删除在远端已经不存在的分支,但是在本地分支存在的远端分支
- 某个本地分支没有add在暂存区的文件更改,但是其他其他本地分支需要或者reset到指定的commit点,可以现在做了文件更改的本地分支执行git
stash,然后切换本地分支做其他拉取其他commit内容,处理完后再切回到原来的本地分支执行,git stash pop将原来本地分支未add在暂存的文件变动重新更新到本地
二、fork后的合并:
git checkout master
git fetch
git status
git reset --hard origin/master
git remote add lrr git://github.com/lurongrong/break_kit.git
git fetch --all
git history --all-match --stat
git merge lrr/lrr.test
三、问题总结
1.解决冲突:
冲突造成原因:
在push新的变动到远端自己的分支之前,没有fetch得到最新的内容,最新的内容变动和自己新修改的文件是同一个,push到自己远端分支后发现没有生成新的pr,再次fetch,想要rebase到最新的origin/master上,却有如下报错:
解决办法:
vim进入有冲突的文件,对比origin/master上最新的内容,加上自己修改的内容,将文件修改为最终的状态,保存,退出。同样办法处理完有冲突的文件后,执行git add 修改过冲突的文件,之后执行git rebase --ccontinue,此时就会将解决有冲突的commit,新的commit在最新合并内容上添加的。
四、gitsubrepo
配置文件:.gitsubrepo
脚本:git-subrepo
sh git-subrepo 目录
总结:规范操作
每次在git commit之前确定是在最新的commit,git fetch确保一下,避免再rebase,生出新的commit,影响git commit节点排序
git push origin liurong:liurong 为将本地liurong分支合并到远端liurong分支
git push origin liurong:master 为将本地liurong分支合并到远端master分支
git使用规范:
https://github.com/bsc-s2/s2-doc-internal/blob/master/src/dev/git-guide.md