使用可视化工具SourceTree
- 下载地址:https://www.sourcetreeapp.com/
- 使用branch管理代码
- 下载git代码:Clone/New ->粘贴项目git url -> 选择本地存放路径->Clone
- 创建本地分支:Branch+ -> 填写分支名称 ‘branch1’ -> Creat Branch,创建之后默认就是在当前分支下
- 修改文件
- 提交代码并创建新的git远程仓库分支:将修改的文件从unstage的状态变成stage的状态 -> Commit -> Push 要选择对应的git分支'branch1'进行push, 完成之后git上的当前项目下会创建一个新的分支叫做‘branch1’
- Git上面生成pull request
- 找到branch1->new pull request,则会在当前分支下生成一个新的pull request,可以进行merge操作合并到master上
- 每次进行代码开发前,都要保证当前开发的本地分支获取到最新的代码
- 使本地master代码为最新:将代码切换到master上面 -> 右击,pull origin/master -> Pull from remote: origin & Remote branch to pull: master, 完成
- 是当前branch代码为最新:本地master代码为最新后,将代码切换到branch1上面 -> 右击master -> Merge master into current brach, 完成
- 一些注意事项:
- 如果当前分支有没有提交的修改,是不允许切换到master或者别的分支的
- 如果想在别人创建的分支上面进项修改,则可以:在sourceTree上找到git上面对应的分支 Remote/origin/branch2 -> 右击branch2,check out, 本地就会有branch2这个分支,进行修改后提交,还是提交到对应的git branch上面就可以了
使用Git Bash命令
修改代码并提交的流程:
1. 方法一:先在远程端建立远程分支
$ git clone path
$ git checkout local_branch //切换到本地分支
$ git add -A //增加文件
$ git commit -am "注释" //提交代码
$ git push //推动代码到远程分支
2. 方法二:直接建立本地分支
$ git checkout -b hong.wang5_1 //创建并切换到新分支相当于:git branch xxx, git checkout xxx
$ git commit -am "注释"
$ git push origin hong.wang5_1 //创建远程分支并push代码
更新本地分支代码流程
$ git checkout master //切换到本地master
$ git pull //拉取最新代码
$ git checkout local_branch //切换到本地分支
$ git merge master //合并本地master到本地分支
其他有用命令
$ git branch //查到本地分支
$ git branch -a //查看远程分支
$ git fetch -p //同步远程分支的信息
$ git push origin -d remote_branch //删除远程分支
$ git branch -d local_branch //删除本地分支
想要覆盖本地修改,但是遇到master有修改的内容
git checkout master
git branch -d local_branch //先删除本地分支
git status //查看master状态
git checkout . //删除修改内容
git clean -f //删除新建的文件
拉取代码时遇到冲突
git stash (把本地所有修改暂存)
git pull
git stash pop (将暂存代码合并到本地最新代码中,冲突文件中会显示冲突内容)
git stash clear(清除暂存)
撤销本地commit
>>> git reset --soft HEAD^ 不删除工作空间的代码改动,撤销commit, 不撤销git add
>>> git reset --mixed HEAD^ 不删除工作空间的代码改动,撤销commit, 并且撤销git add (默认值,等于git reset HEAD^)
>>> git reset --hard HEAD^ 删除工作空间的代码改动,撤销commit, 并且撤销git add (默认值,等于git reset HEAD^)
合并多个commit
- 把无用的,误操作的多个commit合并成一个大的commit,可以是git上面的pull request的历史提交记录看起来整洁
- 学习地址:http://gitready.com/advanced/2009/02/10/squashing-commits-with-rebase.html
- 练习:
- cmd到当前项目下,我喜欢使用source tree上面的Terminal,这样可以快速进到对应的分支下进行操作
- cmd: git rebase -i HEAD~3 回车(这里的3代表想合并的commit数量,从最新的开始)
- 第二步操作之后,命令行中会显示最新的三个commit,我们从第二个commit开始,将pick换成squash (因为要留一个当做合并的头头)-> 键盘上‘退出’ -> 键盘上‘:’ -> 键盘上 ‘wq’ (代表保存退出)
-
第三步之后界面上会显示压缩的状态,最后可以输入这个合并commit的相关注释,也可以不输入 -> 键盘上‘退出’ -> 键盘上‘:’ -> 键盘上 ‘wq’ (代表保存退出)
-
-
第四步之后界面上会显示rebase的结果,source tree上面对应的branch会显示3个pull,1个push(这是因为git上面的branch和本地的branch对比的结果,所以是没有办法直接用source tree将这个更改push上去的,因为本地的branch相对于git来说是落后的,因此只能用命令行强行push,如果source tree上面有办法强行push也是可以的)
- 最后一步就是强行push:cmd 'git origin branch1:branch1', 完成,对应的pull request中的commit记录会合并
- 注意事项:
- 如果向重新rebase,则可以在本地项目.git目录下删除之前生成的rebase..文件,不然是不能重新开始的