一:git最基本的操作流程
1.初始化创建远程仓库
git init --bare url
2.初始化本地仓库,切换到需要初始化的本地仓库目录执行命令
git init
3.将本地目录和远程目录关联起来,即增加Remote的仓库的url(需要为远程git repository起个名字,默认使用origin作为名字)
git remote add origin url
4.删除remote(如果remote的路径发生更改,可以删除之后重新建立remote)
git remote rm origin
5.执行本地的提交
git add file
git commit -m “init commit”
6:将本地代码提交到远端仓库
git push -u origin master
二:分支管理策略
Git主分支的名字,默认叫做Master。它是自动建立的,版本库初始化以后,默认就是在主分支上。
所有的日常开发在Develop分支上进行,Develop分支可以用来生成代码的最新隔夜版本(nightly)
另外可以创建一些临时性分支,主要可以分为两类:功能性分支(feature-*)和Bug修复性分支(bugfix-*)。它们属于临时性需要,使用完以后,应该删除,使得代码库的常设分支始终只有Master和Develop
其中功能性分支是从Develop分支上面分出来的,开发完成合并到Develop分支,然后删除
Bug修复性分支是从Master分支上分出来,开发完成之后合并到Master以及Develop分支,然后删除
三:分支常见操作
1.列出所有分支,以及所处的当前分支.如果是当前分支,分支前会有*号标示
git branch dev
2.在当前所在的分支创建分支
git branch dev
3.切换分支
git checkout master
4. 删除分支
git branch -d dev //普通删除分支
git branch -D dev //强制删除本地分支
5.合并分支
git merge --no-ff -m "merged bug fix 101" issue-101
默认情况下,Git执行"快进式合并"(fast-farward merge),会直接将Master分支指向Develop分支,
使用--no-ff参数后,会执行正常合并,并在Master分支上生成一个新节点,为了保证版本演进的清晰推荐都加上--no-ff参数
四:当前正在开发分支(Develop)上进行开发,这时候来了一个紧急的Bug修改任务,而有不想提交Develop上正在进行的开发,那如何处理?
1.执行git stash,将当期工作现场“储藏”起来,等以后恢复现场后继续工作
2.切换到Master分支,git checkout master
3.创建新的分支,git checkout -b issue-101[或者git branch issue-101]
4.切换到新的分支 git checkout issue-101
5.如果修改完成之后,add、commit到本地仓库中
6.合并分支到Master
6.1:切换到Master分支,git checkout master
6.2:然后合并分支,git merge --no-ff -m "merged bug fix 101" issue-101
6.3:切换到Develop分支,git checkout Develop
6.4:合并分支到Develop git merge --no-ff -m "merged bug fix 101" issue-101
6.5:删除分支 git branch -D issue-101
五:强制放弃本地所有修改,获取master中最新版本更新本地
git fetch --all //下载远程库的所有内容,但不与本地做任何合并
git reset --hard origin/master //指的是把本地指向刚刚下载的最新版本
六:Git版本回退
1:本地丢弃修改,这是未add到暂存区的情况
git checkout -- file
2:将暂存区内的修改撤销,重新放回工作区
git reset head file
3:回退到上一代版本
git reset --hard head^
4:回退到指定版本
git reset --hard commitID
在回退完成之后记得强制覆盖远端分支
git push -f origin branchName
七:解决冲突
出现冲突的情况。
当开发分支内与需要合并的主分支内有同一行代码被修改的时候就会发生冲突;
这时候无法提交,必须手动解决冲突后再提交;
Git用<<<<<<<,=======,>>>>>>>标记出不同分支的内容;
首先创建冲突分支,需要手动打开发生冲突的文件,然后找出冲突的内容,确定保存哪一段代码,然后重新add,commit之后提交,最后删除冲突分支。
Git 常见问题
1:如何解决’fail to push some refs to git’
答:git pull --rebase origin master //进行代码合并
git push -u origin master //即可完成代码上传
2:if you wish to set tracking information for this branch you can do so with:
git branch --set-upstream master origin/master
答:指定当前工作目录工作分支,跟远程仓库分支之间的联系
git branch --set-upstream master origin/master
3:git pull 获取最新代码报以下错误
Fatal:refusing to merge unrelated histories
答:git pull 之后加上可选参数 --allow-unrelated-histories 强制合并
git pull origin master --allow unrelated-histories
4:.gitignore 规则不生效的解决办法
答:把某些目录或文件加入忽略规则,按照上述方法定义后发现并未生效,原因是.gitignore 只能忽略那些原来没有被追踪的的文件,如果某些文件已经被纳入了版本管理中,则修改的.ingnore 是无效的。那么解决办法就是把本地缓存先清除(改变成未追踪的状态),然后再提交:
git rm -r --cached 或者 git rm -r readme.md
git add
git commit -m 'update .gitignore'