一、代码提交之前的pull及冲突解决
还没有commit:
- 通过git stash save "save message" 将自己写的东西存起来。
- 通过git pull --rebase 拉取代码并将自己放在最新,rebase和merge的区别可以另外了解下。
- 通过git stash pop或者 git stash apply将保存的恢复,其中pop是直接删掉这个stash,apply是不删,可以通过git stash list查看stash的列表。
- 将冲突处理。
- 执行git commit -m "commit message" 进行commit,然后push到远程仓库。
本地代码已经commit:
- 通过git pull --rebase 拉取代码并将自己放在最新。
- 有冲突的话处理冲突,冲突处理后执行git add ,不需要commit,然后执行git rebase --continue使rebase继续。
- 这个时候是已commit的本地仓库分支,可以直接push到远程。
二、git reset重置到指定的Commit
- git reset --mixed:回到指定的commit,当前与回退的版本的差异全部放在work_tree中。
- git reset --soft:回到指定的版本,work_tree不变,中间的commit的变化加入到暂存区中。
- git reset --hard:直接回到指定的版本,中间的全部擦除掉。
三、git cherry-pick
详细的可以看这篇博客
四、跟踪远程分支
- 查看本地与远程的映射关系:git branch -vv。
- 在本地新建分支x,并自动切换到该本地分支x:git checkout -b 本地分支名x 远程仓库名/远程分支名x。
- 在本地创建分支,不切换到新建的分支:git branch 本地分支 远程仓库/远程分支。
- 设置已有分支的跟踪关系:git branch -u origin/remote_branch_name local_branch_name
- 撤销对远程分支的跟踪:git branch --unset-upstream
五、子模块
- 添加子模块:git submodule add git地址
- 如果项目的模块中已经有了子模块,那么先git submodule init 然后进行更新 git submodule update。
- 进入相应的子模块的目录下,那么git就是在子模块的仓库了,可以通过git branch 或git log等查看子模块的相关信息。