GIT · Advanced history · 10 min
Assemble selected features
Cherry-pick two small features and squash a third branch.
Not completedYour task
On main, include the search and logs features as separate commits, then metrics as one squash commit. Keep main linear with four commits total.
What you’re aiming for
- search.txt, logs.txt, and metrics.txt contain the completed features.
- main has four commits and no merge commit.
1. Prepare your practice folder
Use Git 2.28 or newer. The setup commands below use a Bash-compatible shell: Git Bash on Windows, or Bash on Linux/macOS.
Create a new, empty folder for this exercise. If that name already exists, choose another new name. Continue only after you’re inside the new folder.
mkdir opsrung-git-select-feature-commits && cd opsrung-git-select-feature-commits
Run these setup commands in that folder:
git init --initial-branch=main git config --local user.name 'Practice Learner' git config --local user.email 'practice@example.invalid' printf '%s\n' 'A disposable OpsRung practice repository.' > README.txt git add -- README.txt git commit -m 'Start practice' git switch -c feature/search printf '%s\n' 'Search enabled.' > search.txt git add -- search.txt git commit -m 'Add search' git switch main git switch -c feature/logs printf '%s\n' 'Decision logs enabled.' > logs.txt git add -- logs.txt git commit -m 'Add logs' git switch main git switch -c feature/metrics printf '%s\n' 'Counter draft.' > metrics.txt git add -- metrics.txt git commit -m 'Start metrics' printf '%s\n' 'Counter and timing complete.' > metrics.txt git add -- metrics.txt git commit -m 'Finish metrics' git switch main
Only if your personal Git settings interfere
You can normally skip this. If a commit asks for a signing key, runs a custom hook, or changes line endings unexpectedly, these repository-local overrides keep this disposable exercise independent of those settings.
git config --local commit.gpgsign false git config --local core.autocrlf false git config --local core.hooksPath .git/practice-no-hooks
Retry the failed command afterward. These settings apply only inside this practice repository.
2. Try the task
Work toward the goal above. Start by inspecting the files or resources, then use a hint if you need one.
Hint 1
Cherry-pick copies the selected commit’s change onto your branch.
Hint 2
A squash merge stages the final change without adding a merge parent.
Hint 3
Pick feature/search, pick feature/logs, then squash feature/metrics and commit.
3. Review your result
Use these commands to look at your result and compare it with the goals. The website does not run or verify them.
git status git log --oneline --graph --all -12
What you should see
- search.txt, logs.txt, and metrics.txt contain the completed features.
- main has four commits and no merge commit.
If your result differs: Work only in this exercise’s repository. Compare the branch, files, and history with every goal before marking complete.
Compare with one possible solution
git cherry-pick feature/search git cherry-pick feature/logs git merge --squash feature/metrics git commit -m 'Add completed metrics'
Other approaches are fine if you reach the same goal. Opening this solution does not mark the exercise complete.
Finished this exercise?
You decide when you’re done. Your choice is saved in this browser, and you can change it later.