Git命令游戏教程网站:https://learngitbranching.js.org/?locale=zh_CN
日常使用
命令
- git push
1.不省略的写法
适合<本地分支名>
和<远程分支名>
不一样的情况
将本地的dev
分支上的代码推送到远程主机名为origin
中test
的分支上。如果远程的test
分支不存在,则会被创建
git push origin dev:test
2.省略:<远程分支名>
本地分支名和远程分支名一样的情况
git push origin dev
- 查看git分支的编号
git log --oneline
- 切换分支
git checkout [branch]
注意:在切换分支之前,当前分区工作目录的文件一定要提交到git仓库中,保持当前分支工作区完全干净。
- 新建一个分支,并切换到该分支
git checkout -b [branch]
- 新建一个分支,HEAD指向远程仓库的指定分支,并切换到该分支
git checkout -b [新分支] origin/[远程分支名]
- 从当前分支下的某个指定commit新建分支
git checkout -b [新分支] [commit-id]
例子:当前分支的git log
分支1
分支2
分支3
现在希望从分支2新拉一个分支,命令为git checkout -b new-branch 分支2的commit-id
- 重命名分支
(已经切换到要重命名的分支)
git branch -m new_name
(在其他分支)
git branch -m old_name new_name
- 合并分支merge
要使main主分支包含所有修改的代码:要把bugFix分支(c2位置)合并到main主分支(原本在c3位置),必须先切换到main分支,然后输入git merge bugFix
。
现在的main(c4位置)有两个父节点,它包含对代码库的所有修改。
- 合并分支 rebase
(Rebase 实际上就是取出一系列提交记录,“复制”它们,然后在另外一个地方逐个的放下去。rebase较于merge的优势是可以创造更线性的提交历史。)
1)要使main主分支包含所有修改的代码:要把bugFix分支(原本c3位置)合并到main主分支(c2位置),先切换到bugFix分支,然后输入git rebase main
。
但main尚未更新。
这里的 c3' 是我们 Rebase 到 main 分支上的 c3 的副本。
2)切换到main上,git rebase bugFix
。现在main包含对代码库的所有修改。
这里由于bugFix继承自main,所以git只是把main分支的引用往前移动了一下而已。
[整理提交记录]
- cherry-pick,把一些提交复制到当前位置(HEAD)下面
输入命令git cherry-pick c3 c4 c7
。
cherry-pick和rebase不同,它可以只将我们指定的部分提交记录放到当前分支下。
- fetch
同步远程服务器上的数据到本地:git fetch origin
git pull
的操作结果= git fetch
+ git merge
(但工作原理不同)。
git fetch
将远程仓库的代码下载过来,同一块代码远程和本地不同 需要经过确认后merge
为一个新的代码版本;
而git pull
基于本地代码,不经过确认,直接将远程代码合并到本地。
- 如果当前分支修改的文件没有提交到git仓库,直接checkout 其他分支/master分支,会发生什么情况