Menu
CoddyTech

Git 在线练习

编写、运行和分享代码片段,无需任何配置。

Git 终端
user$ git init -q
user$ git symbolic-ref HEAD refs/heads/main
user$ git config user.name "You"
user$ git config user.email "you@example.com"
user$ echo "content" > a.txt
user$ git add a.txt
user$ git commit -m "Add a.txt"
user$
仓库

点击运行查看提交图。

每次运行都会重放整个脚本,并在每行之后为仓库拍下快照。点击某一步即可查看当时的提交图。

试试常用 Git 命令

这个终端也能运行 Git。把现成的工作流加载到命令行,点击运行,看每条命令依次执行,然后打开任意命令的完整指南深入了解。

创建仓库并完成第一次提交初始化仓库,暂存一个文件,提交它,然后查看状态。
  1. git init
  2. git config user.name "You"
  3. git config user.email "you@example.com"
  4. echo "# My Project" > README.md
  5. git add README.md
  6. git commit -m "Initial commit"
  7. git status
  8. git log --oneline
创建分支并合并创建分支,做一处修改并提交,然后把分支合并回 main。
  1. git init
  2. echo "hello" > app.txt
  3. git add app.txt
  4. git commit -m "Add app.txt"
  5. git checkout -b feature
  6. echo "new feature" >> app.txt
  7. git commit -am "Work on feature"
  8. git checkout -
  9. git merge feature
  10. git log --oneline --graph
撤销上一次提交做一次后悔的提交,然后撤销它,同时保留你的修改。
  1. git init
  2. echo "v1" > notes.txt
  3. git add notes.txt
  4. git commit -m "Add notes.txt"
  5. echo "v2" >> notes.txt
  6. git commit -am "Oops, wrong message"
  7. git reset --soft HEAD~1
  8. git status
  9. git commit -m "Update notes.txt"
  10. git log --oneline
第一次推送到远程仓库针对本地远程仓库,运行 GitHub 为新仓库给出的三条命令。
  1. git init
  2. echo "# My Project" > README.md
  3. git add README.md
  4. git commit -m "First commit"
  5. git branch -M main
  6. git init --bare remote.git
  7. git remote add origin remote.git
  8. git push -u origin main
  9. git remote -v
把多个提交压缩成一个不用编辑器,把两个进行中的提交合成一个干净的提交。
  1. git init
  2. echo "v1" > app.txt
  3. git add app.txt
  4. git commit -m "Add app.txt"
  5. echo "v2" >> app.txt
  6. git commit -am "WIP"
  7. echo "v3" >> app.txt
  8. git commit -am "More WIP"
  9. git reset --soft HEAD~2
  10. git commit -m "Finish app.txt"
  11. git log --oneline
从另一个分支拣选提交把分支上的一个修复复制到 main,而无需合并整个分支。
  1. git init
  2. echo "hello" > app.txt
  3. git add app.txt
  4. git commit -m "Add app.txt"
  5. git checkout -b hotfix
  6. echo "fixed" > fix.txt
  7. git add fix.txt
  8. git commit -m "Fix the bug"
  9. git checkout -
  10. git cherry-pick hotfix
  11. git log --oneline --all --graph

带实时提交图的 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。每次运行都会在隔离的 Linux 沙盒容器中用正版 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 的课程吗?
有。Coddy 的免费 Git 课程从 git init 讲到分支、合并、变基和远程仓库,配有自动检查的练习。Git 命令参考中的每个命令页面都有一个“在终端在线编辑器中实时试试”按钮,会在这个在线编辑器中打开一个可运行的示例。