工作区、暂存区、版本库概念
常规操作
克隆代码
git clone git@github.com:shizhongyu/ScreenShotTest.git
查看本地的代码状态
git status 命令用于显示工作目录和暂存区的状态。
同步代码
同步远端分支变化
// 拉取指定分支的变化
git fetch origin master
// 拉取所有分支的变化
git fetch
// 拉取所有分支的变化,并且将远端不存在的分支同步移除【推荐】
git fetch -p
同步远端代码变化
// 都是先 git fetch,然后执行合并操作
// 不同的是,git pull 执行的是 git merge,git pull -r 执行的是git rebase
git pull origin master
git pull -r origin master
Commit
新增 commit
// 添加文件到缓存区,然后提交到本地仓库
git add files
git commit -m '提交备注'
撤销 commit
// 会将提交记录回滚,代码还在
git reset b14bb52
// 会将提交记录回滚,代码会没
git reset --hard b14bb52
// 将部分代码文件回滚
git checkout -- files
合并 commit
// Git 提供了两种合并 commit 的方式
git merge master
git rebase master
问题
reset 和 checkout 的区别
例如,假设我们有 master 和 develop 分支,它们分别指向不同的提交(上图左边);我们现在在 develop 上(所以 HEAD 指向它)。 如果我们运行 git reset master,那么 develop 会和 master 指向同一个提交; 而如果我们运行 git checkout master 的话,develop 不会移动,HEAD 自身会移动,指向 master。
所以,虽然在这两种情况下我们都移动 HEAD 使其指向了提交 A,但做法是非常不同的。 reset 会移动 HEAD 分支的指向,而 checkout 则移动 HEAD 自身。
rebase 和 merge 到底有什么区别
merge
rebase
总结: git merge 处理冲突更直接,而git rebase 能够保证清晰的 commit 记录。
理解 git rebase
其实“git rebase”就是一系列的“cherry-pick”,只是这一系列的动作用一条命令(git rebase)给完成了。你完全可以通过多次手动“cherry-pick”来复制其行为(不过不太方便,更容易出现人为错误)。