Git 在线练习
编写、运行和分享代码片段,无需任何配置。
git log --oneline --graph --all这一步之后的提交
- ea85bd9 Merge branch 'feature' (HEAD -> main) <- f5363c6, 47b6cfb
- 47b6cfb Work on feature (feature) <- b2134da
- f5363c6 Hotfix on main <- b2134da
- b2134da Add app.txt
- 工作区干净
每次运行都会重放整个脚本,并在每行之后为仓库拍下快照。点击某一步即可查看当时的提交图。
试试常用 Git 命令
这个终端也能运行 Git。把现成的工作流加载到命令行,点击运行,看每条命令依次执行,然后打开任意命令的完整指南深入了解。
git initecho "hello" > app.txtgit add app.txtgit commit -m "Add app.txt"git checkout -b featureecho "new feature" >> app.txtgit commit -am "Work on feature"git checkout -git merge featuregit log --oneline --graph
git initecho "v1" > notes.txtgit add notes.txtgit commit -m "Add notes.txt"echo "v2" >> notes.txtgit commit -am "Oops, wrong message"git reset --soft HEAD~1git statusgit commit -m "Update notes.txt"git log --oneline
git initecho "# My Project" > README.mdgit add README.mdgit commit -m "First commit"git branch -M maingit init --bare remote.gitgit remote add origin remote.gitgit push -u origin maingit remote -v
git initecho "v1" > app.txtgit add app.txtgit commit -m "Add app.txt"echo "v2" >> app.txtgit commit -am "WIP"echo "v3" >> app.txtgit commit -am "More WIP"git reset --soft HEAD~2git commit -m "Finish app.txt"git log --oneline
带实时提交图的 Git 在线编辑器
这是一个免费的 Git 在线编辑器,在隔离的 Linux 沙盒终端中运行真正的 git,而不是用 JavaScript 模仿出来的版本。在左侧输入命令(git init、git add、git commit、git branch、git merge、git rebase、git reset),点击运行,右侧的仓库面板会在脚本的每一行执行后重新绘制提交图、分支、HEAD 和工作区。这是在线练习 Git、亲眼看清每条命令做了什么的最快方式。
每次运行都会从一个空文件夹开始重放你的整个脚本,并在每条语句执行后给仓库拍一张快照,所以你可以点击任意一步,查看那一刻的提交图。被 git reset 抛下的提交会以淡色留在图上,让你看清撤销操作到底撤销了什么。无需安装,无需账号,也绝不会动到你自己的任何仓库。
这个 Git 在线编辑器有什么不同
- 真正的 Git,真实的输出:沙盒在 Linux 上运行正版
git程序,所以错误信息、git log --graph、git status以及各种参数的表现都和你电脑上一样,不像 Git 模拟器那样只认识作者实现过的命令。唯一有意为之的区别:作者身份和提交日期是固定的,所以每次运行的哈希值都保持不变。 - 每执行一行就更新的提交图:分支显示为泳道,合并显示为曲线,
HEAD和每个引用都以标签形式标在对应的提交上,另外还有从git status读取的已暂存、已修改、未跟踪和冲突文件。点击某一步,就能在本次会话的历史中来回查看。 - 练习大家最常搜索的操作:撤销提交、压缩提交、变基到 main、cherry-pick、stash、解决合并冲突、安全地强制推送。可以加载下方现成的工作流,也可以打开 Git 命令参考中的任意页面,点击“在终端在线编辑器中实时试试”。
- 不联网也能用远程仓库:创建一个本地裸仓库,把它添加为
origin,然后对它练习git push、git fetch、git pull和git clone。提交图会显示origin/main在main旁边移动。 - 结果可复现:日期和身份是固定的,所以同一个脚本总会生成相同的提交哈希。把脚本分享给同学,你们看到的提交图完全一样。
在 Git 在线编辑器里可以试试这些
- 创建分支并合并:执行
git checkout -b feature,在新分支上提交,切回main也提交一次,然后执行git merge feature,看合并提交如何把两条泳道连在一起。 - 安全地撤销:做一次你后悔的提交,执行
git reset --soft HEAD~1,看这个提交从图中淡出,而你的修改重新变成已暂存的文件。然后再试试git revert,比较两者的区别。 - 变基与合并对比:把同样的双分支历史构建两遍,一遍用
git merge收尾,另一遍用git rebase main收尾,并排比较两张提交图的形状。 - 故意制造一次合并冲突:在两个分支上修改同一行,然后合并,看文件出现在冲突一栏。解决冲突后执行
git add和git commit,看冲突消失。
Git 在线编辑器常见问题
这个 Git 在线编辑器免费吗?
免费。Git 在线编辑器无需注册,也无需安装。打开页面,输入命令,点击运行。
这是真正的 Git 还是模拟器?
git 程序执行你的脚本,所以命令、参数、输出和错误信息都和你在本地看到的一致。我们有意加了两样东西:一个默认的作者身份(你自己执行 git config user.name 就能覆盖它,和在本地一样),以及固定的提交日期,让每次运行的提交哈希都相同。运行过程中无法等待你的输入,所以像 git rebase -i 这样的交互式命令需要用脚本化的编辑器,示例中演示了具体做法。提交图是怎么工作的?
HEAD、stash 列表和 git status。页面根据这些快照绘制提交图:每个分支一条泳道,合并显示为曲线,每个引用显示为标签。点击某一步的编号,就能看到那一行执行后仓库的样子。在很长的会话中,较早的输入只会在结束时记录一次,步骤条只显示实际记录下来的状态。在这里能练习创建分支、合并和变基吗?
能,提交图就是为此而设计的。创建分支,在分支上提交,然后合并、变基、cherry-pick、reset 和 revert,看每个操作如何改变提交图。它是分支练习游戏的动手替代方案,底层用的是真正的 Git。
可以使用 git push、pull、fetch 和 clone 吗?
git clone https://… 连不上互联网。在子文件夹中创建一个裸仓库(git init --bare remote.git),把它添加为 origin,然后对它执行 push、fetch、pull 和 clone。远程跟踪分支会像使用 GitHub 时一样出现在提交图中。我的操作会在两次运行之间保留吗?
不会。每次运行都从空文件夹开始,重放整个脚本,时间线正是这样实现的。请把命令都保留在输入框中(Shift+Enter 换行),点击重置可以恢复到初始脚本。
它和 Linux 在线终端有什么区别?
它们用的是同一个沙盒终端(Git 在那里也能运行),这里多了一个仓库面板。Linux 终端页面用来运行 shell 命令和脚本;这个页面会编排你的会话,在每一行执行后记录提交图和工作区状态。
有从零开始教 Git 的课程吗?
git init 讲到分支、合并、变基和远程仓库,配有自动检查的练习。Git 命令参考中的每个命令页面都有一个“在终端在线编辑器中实时试试”按钮,会在这个在线编辑器中打开一个可运行的示例。