总结 git 指令应用场景
- 工作区:workspace,电脑里能看到的目录
- 暂存区:stage,也叫索引 index。一般存放在.git目录下的 index 文件。
- 本地仓库:local repository
- 远程仓库:remote repository,例如 github 上的 git 仓库
- 工作区 —> 暂存区 git add
filename - 暂存区 —> 本地仓库 git commit -m
message - 本地仓库 <—> 远程仓库 git remote add origin
- 本地仓库 —> 远程仓库 git push
- 远程仓库区 —> 本地仓库区 git clone
url - 远程仓库 —> 工作区 git pull
- 本地仓库 —> 工作区 git checkout
初始化项目文件
git init
回退版本 git reset
git log 查看提交历史版本(发布给别人看),有一串commit-id
git reflog 查看历史所有版本(私有,包括回滚)
git reset --hard <commit-id> 切回之前的版本
注意:
- add仅仅是选择了要提交的版本,commit才是正式的提交
- reflog是我们私有的日记,log是发布给别人看的日记,都是记录commit的历史
- 提交是基于当前分支的快照
查看区别 git diff
git diff
创建新的分支 git branch
一个分支代表一个独立的开发线
git branch 查看当前有多少分支
git branch X 创建新的分支X
git checkout X 切换到分支X
git checkout -b X 创建并切换到分支X
git branch -d X 删除当前分支
分支合并 git merge
git checkout master 到达你想要保留的分支
git merge x 合并另一条分支
git merge --no-ff X 合并分支(禁用fast-forward模式)
git commit 不需要选择-m -v合并完分支的提交
通常合并分支时,直接使用 git merge 会优先以 fast-forward 模式合并,这种模式下看不出曾经做过合并,在删除分支之后,会丢掉分支信息。
因此,实际运用时,常加上 --no-ff 参数来禁用 fast-forward 模式,这样就会用递归(recursive)方式合并,会在merge时生成一个新的commit,这样,从分支历史上就可以看出分支信息。
解决冲突 git status
git status -sb 发现哪个文件产生冲突
依次打开这些冲突文件,手动选择要保留代码
git add 文件a
git status -sb 查看解决下一个冲突
全部解决完
git commit 不需要选择-m -v
保存现场 git stash
当手头工作没有完成时,先把工作现场 git stash 一下,然后去修复bug,修复后,再 git stash pop,回到工作现场。
git stash 保存工作现场
...
git stash pop 恢复工作现场
git 工作开发注意事项
- 经常
git status查看自己本地分支的状态。 - 经常
git fetch查看是否有远端可以拉取。git pull = git fetch + git merge - 合并分支前要先
git pull,注意合并的是哪个分支,如无特别情况使用git merge --no-ff。 - 每次提交之前(add 和 commit 之前)先
git diff去 review 自己的代码,确保自己只改了该改的部分,不要改多余的东西。 - push 之前需要先 pull 拉取最新代码。