Basic Operation
-
分支管理
- 切换分支
git checkout <branch name>
git checkout -b <branch name> #branch name 当前不存在 - 查询当前所有分支
git branch - 新建分支
git branch <branch name> - 分支重命名
git branch -m <old_branch> <new_branch> - 删除分支
git branch -d <BranchName> #本地分支
git push origin --delete <BranchName> #远程分支
git push origin :<BranchName> #远程分支
- 切换分支
检查当前git工作区状态
git status将修改添加到暂存区(文件的信息添加到索引库)
git add [file]提交本次更改记录
git commit
我们这里用的是git cz查看commit log
git loggit隐藏操作(stash)
对当前工作区已修改文件进行临时存储,适合于代码未提交但是其他git操作需要当前工作区提交的场景
git status
恢复工作区
git status popgit提交
git push origin master #提交本地master到远程的master分支
git push origin test:test #提交本地test分支作为远程的test分支-
远程仓库相关
- 添加远程仓库
git remote add <name> <url>
例如: git remote add upstream https://github.com/xxxx/yyyy.git - 查看远程库详情
git remote -v - 同步远程库
git fetch <name>
git fetch upstream
- 添加远程仓库
与远程库upstream同步
git fetch upstream
git checkout master #master与远程库upstream同步
git rebase upstream/mastergit比较两个分支的文件的差异
git diff branch1 branch2 --stat //显示出所有有差异的文件列表
git diff branch1 branch2 文件名(带路径) //显示指定文件的详细差异
git diff branch1 branch2 //显示出所有有差异的文件的详细差异-
两个分支cherry-pick
git log 获取某一分支需要cherry-pick到其他分支的commit id
git checkout xxx 切换到需要合入commit的分支
git cherry_pick <start-commit-id>…<end-commit-id> # start-commit-id 到 end-commit-id 之间所有的 commit,不包含start-commit-id
git cherry_pick <start-commit-id>^…<end-commit-id> # start-commit-id 到 end-commit-id 之间所有的 commit,包含start-commit-idgit cherry_pick commit_id1 commit_id2 与git cherry_pick commit_id2 commit_id1执行效果不同
Trouble Shooting
rebase常见问题
rebase过程中如果出现冲突,解决冲突后,执行git add后继续执行git rebase --continue
取消已在进行中的rebase操作,执行git rebase --abort,版本回退到执行rebase操作前的状态-
push无法成功
一般是由于本地代码与远程仓库代码不一致导致,有两种解决办法pull远程仓库,修改冲突后再提交
git pull
查看编辑冲突后再 git pull一下,就合并了。
git status
把本地分支test push到远端分支
git push本地代码覆盖远端代码
git push --force
远端分支多人使用情况下执行,有可能将他人的commit覆盖删除