常用命令
- 场景: 创建本地git仓库并提交代码
- git init 初始化仓库(只需要执行一次)
- git add . 将修改提交到缓存区
- git commit –m “commit message” 将修改提交到本地仓库
- git remote add origin https://github.com/githubname/mytest 添加远程仓库
- git fetch + git rebase origin/master 同步远端代码,并合并到本地(自己修改代码的时候可能会有别人同时对项目做了修改,在提交自己的代码之前需要先将这些修改同步到本地)
- git push origin HEAD:refs/heads/master 将修改提交到远程仓库(因为一个项目可以指定多个远程仓库,origin是为了指定是哪个远程仓库,HEAD:refs/ heads /master则是为了指定将本地的什么修改提交到远程仓库的什么地方)。
- 场景:本地对项目完成修改好,需要提交修改。
只需要重复2)、3)、5)、6)
分支管理
- 创建分支
- git branch newBranch
- git checkout –b newBranch oldBranch(可以是本地地址,也可以是远程地址)
第一条命令只能将当前分支复制到newBranch;第二条命令可以将任意分支复制到newBranch。执行完第一条命令,本地仍处于oldBranch,需要再执行切换分支命令切换到newBranch;执行完第二条命令将本地切换到新的分支
- 切换分支
git checkout branchname(切换分支不是用git branch,git branch 是创建分支)
- 分支重命名
git branch –m oldName newName
- 查看项目的所有分支
git branch 只查看当地分支
git branch –a 查看当地分支和远程分支
- 删除分支
git branch –d branchName (删除之前要先切换到别的分支)
- e
rebase冲突解决
https://www.cnblogs.com/blackeyes/p/7636768.html
- 冲突之后git会对冲突文件做如上的修改,用“========”做分隔(上面的是远程代码,下面的是本地代码),我们需要手动做出修改。
- 修改完成后,使用git add .来标记完成修改;
- 使用git rebase --continue进行rebase
- 备注:当冲突出现时可以使用git rebase –skip强行rebase,也可以使用git rebase –abort放弃rebase。
merge冲突解决
https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/001375840202368c74be33fbd884e71b570f2cc3c0d1dcf000/
- 出现冲突之后手动修改文件
- 重新git add 、git commit
reset
reset后面只有一个关于文件的参数(git reset --hard HEAD~1),这个操作并不涉及到远程分支。
- soft:只有head指针回退;
- hard:head指针、缓存区、本地全部回退;
- mixed(默认策略):head指针、缓存区回退,本地不回退。
reset后面有两个关于文件的参数(git reset HEAD filepathname)
- 使用HEAD覆盖掉本地文件的修改(此时本地的一部分修改没被提交到本地仓库中)
代码回退
- 未使用git add:
- git checkout -- filepathname(注意要加--,否则就成了检出分支了)
- git checkout . 表示全部回退(注意不包括新建文件,因为新建文件不被索引)
- 使用了git add 改动了缓存区
git reset HEAD filepathname (git reset表示用HEAD重置缓存区,而非reset本地)
git reset HEAD . 表示全部回退
- 使用了commit
参见本文中的reset
辅助命令
- git status
- git log
git log:打印当前分支的所有commit
git log--all:打印所有分支的所有commit
git log--all –graph;以图形的方式打印所有分支的所有commit
- git show $commitId
- e
其他
- 在本地的修改没有提交的情况下使用checkout -b切换到别的分支otherBranch,本地的修改仍然会存在,在otherBranch分支上git status可以查看到本地的修改。(不使用-b参数会切换失败)
- pull命令=fetch+merge
- rebase和merge的区别(效果如下图)
rebase先撤销本分支的最新修改,再将别的分支的修改作用于本分支,最后将第一步撤销的修改作用于本分支,最终是线性的分支结构
merge是直接将两个分支合并,最终是树状的分支结构