doc updates
This commit is contained in:
296
tech_docs/git.md
296
tech_docs/git.md
@@ -1,3 +1,299 @@
|
||||
|
||||
---
|
||||
|
||||
To enhance your Git skills, here's a breakdown of the commands you already know and some additional commands and practices that can help you work more efficiently:
|
||||
|
||||
### Basic Git Workflow
|
||||
|
||||
1. **Check Status:**
|
||||
```sh
|
||||
git status
|
||||
```
|
||||
This shows the current state of your working directory and staging area.
|
||||
|
||||
2. **Add Changes:**
|
||||
```sh
|
||||
git add .
|
||||
git add file_name
|
||||
```
|
||||
The first command stages all changes, while the second stages specific files.
|
||||
|
||||
3. **Commit Changes:**
|
||||
```sh
|
||||
git commit -m "Your commit message"
|
||||
```
|
||||
This records the staged changes in the repository with a message.
|
||||
|
||||
4. **Push Changes:**
|
||||
```sh
|
||||
git push origin main
|
||||
```
|
||||
This uploads your local commits to the remote repository.
|
||||
|
||||
### Advanced Git Commands and Practices
|
||||
|
||||
1. **Interactive Add:**
|
||||
```sh
|
||||
git add -p
|
||||
```
|
||||
This allows you to interactively review and stage changes hunk by hunk.
|
||||
|
||||
2. **Restore Changes:**
|
||||
```sh
|
||||
git restore <file>
|
||||
```
|
||||
This discards changes in the working directory.
|
||||
|
||||
3. **Remove Files:**
|
||||
```sh
|
||||
git rm <file>
|
||||
```
|
||||
This stages the removal of files from the repository.
|
||||
|
||||
4. **Check Logs:**
|
||||
```sh
|
||||
git log
|
||||
git log --oneline --graph --decorate --all
|
||||
```
|
||||
These commands show commit history. The second one provides a more visual representation.
|
||||
|
||||
5. **Branching and Merging:**
|
||||
```sh
|
||||
git branch
|
||||
git branch new-branch
|
||||
git checkout new-branch
|
||||
git checkout -b new-branch
|
||||
git merge new-branch
|
||||
```
|
||||
These commands manage branches, allowing you to create, switch, and merge branches.
|
||||
|
||||
6. **Rebase:**
|
||||
```sh
|
||||
git rebase main
|
||||
```
|
||||
This integrates changes from another branch into your current branch, maintaining a linear history.
|
||||
|
||||
7. **Stashing:**
|
||||
```sh
|
||||
git stash
|
||||
git stash apply
|
||||
git stash list
|
||||
```
|
||||
These commands temporarily save changes that aren’t ready to be committed.
|
||||
|
||||
8. **Resetting:**
|
||||
```sh
|
||||
git reset --soft HEAD~1
|
||||
git reset --hard HEAD~1
|
||||
```
|
||||
These commands undo changes by resetting to a previous commit. The first keeps changes in the working directory, while the second discards them.
|
||||
|
||||
9. **Tagging:**
|
||||
```sh
|
||||
git tag v1.0
|
||||
git push origin v1.0
|
||||
```
|
||||
These commands create and push tags for marking specific points in history.
|
||||
|
||||
10. **Reverting:**
|
||||
```sh
|
||||
git revert <commit>
|
||||
```
|
||||
This creates a new commit that undoes the changes of a specific commit.
|
||||
|
||||
### Best Practices
|
||||
|
||||
1. **Write Meaningful Commit Messages:**
|
||||
- Use imperative mood: "Fix bug" instead of "Fixed bug".
|
||||
- Separate subject from body with a blank line.
|
||||
- Limit the subject line to 50 characters.
|
||||
|
||||
2. **Use Branches for Features and Bug Fixes:**
|
||||
- Create separate branches for different features or fixes to keep your main branch clean and stable.
|
||||
|
||||
3. **Regularly Pull and Rebase:**
|
||||
- Keep your branch up to date with the main branch by regularly pulling and rebasing.
|
||||
|
||||
4. **Review Changes Before Committing:**
|
||||
- Use `git diff` to review changes before staging and committing them.
|
||||
|
||||
By incorporating these advanced commands and best practices into your workflow, you'll become more proficient with Git and improve your version control practices.
|
||||
|
||||
---
|
||||
|
||||
### Detailed Explanations and Examples
|
||||
|
||||
#### 1. **Checking Status:**
|
||||
```sh
|
||||
git status
|
||||
```
|
||||
- Shows the current state of the working directory and staging area.
|
||||
- Use it frequently to keep track of changes.
|
||||
|
||||
#### 2. **Adding Changes:**
|
||||
```sh
|
||||
git add .
|
||||
```
|
||||
- Stages all changes in the working directory.
|
||||
```sh
|
||||
git add file_name
|
||||
```
|
||||
- Stages specific files.
|
||||
|
||||
#### 3. **Committing Changes:**
|
||||
```sh
|
||||
git commit -m "Your commit message"
|
||||
```
|
||||
- Records the staged changes with a message.
|
||||
- Use clear, descriptive messages. For example, "Fix typo in README.md".
|
||||
|
||||
#### 4. **Pushing Changes:**
|
||||
```sh
|
||||
git push origin main
|
||||
```
|
||||
- Uploads local commits to the remote repository.
|
||||
- Ensure your local branch is up to date with `git pull` before pushing.
|
||||
|
||||
### Advanced Git Commands and Practices
|
||||
|
||||
#### 1. **Interactive Add:**
|
||||
```sh
|
||||
git add -p
|
||||
```
|
||||
- Interactively review and stage changes hunk by hunk.
|
||||
- Useful for staging specific parts of a file.
|
||||
|
||||
#### 2. **Restoring Changes:**
|
||||
```sh
|
||||
git restore <file>
|
||||
```
|
||||
- Discards changes in the working directory.
|
||||
- For example, `git restore README.md` will revert changes to the file.
|
||||
|
||||
#### 3. **Removing Files:**
|
||||
```sh
|
||||
git rm <file>
|
||||
```
|
||||
- Stages the removal of files from the repository.
|
||||
- For example, `git rm old_file.txt` will remove and stage `old_file.txt` for deletion.
|
||||
|
||||
#### 4. **Checking Logs:**
|
||||
```sh
|
||||
git log
|
||||
```
|
||||
- Shows commit history.
|
||||
```sh
|
||||
git log --oneline --graph --decorate --all
|
||||
```
|
||||
- Provides a visual representation of commit history.
|
||||
|
||||
#### 5. **Branching and Merging:**
|
||||
```sh
|
||||
git branch
|
||||
```
|
||||
- Lists all branches.
|
||||
```sh
|
||||
git branch new-branch
|
||||
```
|
||||
- Creates a new branch.
|
||||
```sh
|
||||
git checkout new-branch
|
||||
```
|
||||
- Switches to the specified branch.
|
||||
```sh
|
||||
git checkout -b new-branch
|
||||
```
|
||||
- Creates and switches to a new branch.
|
||||
```sh
|
||||
git merge new-branch
|
||||
```
|
||||
- Merges the specified branch into the current branch.
|
||||
|
||||
#### 6. **Rebasing:**
|
||||
```sh
|
||||
git rebase main
|
||||
```
|
||||
- Integrates changes from another branch, maintaining a linear history.
|
||||
- Use `git pull --rebase` to keep your branch updated.
|
||||
|
||||
#### 7. **Stashing:**
|
||||
```sh
|
||||
git stash
|
||||
```
|
||||
- Temporarily saves changes.
|
||||
```sh
|
||||
git stash apply
|
||||
```
|
||||
- Applies stashed changes.
|
||||
```sh
|
||||
git stash list
|
||||
```
|
||||
- Lists all stashes.
|
||||
|
||||
#### 8. **Resetting:**
|
||||
```sh
|
||||
git reset --soft HEAD~1
|
||||
```
|
||||
- Moves HEAD to the previous commit, keeping changes in the working directory.
|
||||
```sh
|
||||
git reset --hard HEAD~1
|
||||
```
|
||||
- Moves HEAD to the previous commit and discards changes.
|
||||
|
||||
#### 9. **Tagging:**
|
||||
```sh
|
||||
git tag v1.0
|
||||
```
|
||||
- Creates a tag.
|
||||
```sh
|
||||
git push origin v1.0
|
||||
```
|
||||
- Pushes the tag to the remote repository.
|
||||
|
||||
#### 10. **Reverting:**
|
||||
```sh
|
||||
git revert <commit>
|
||||
```
|
||||
- Creates a new commit that undoes changes of a specific commit.
|
||||
- For example, `git revert abc1234` will undo changes from commit `abc1234`.
|
||||
|
||||
### Best Practices
|
||||
|
||||
1. **Write Meaningful Commit Messages:**
|
||||
- Use the imperative mood: "Fix bug" instead of "Fixed bug".
|
||||
- Separate subject from body with a blank line.
|
||||
- Limit the subject line to 50 characters.
|
||||
|
||||
2. **Use Branches for Features and Bug Fixes:**
|
||||
- Keep your main branch clean and stable.
|
||||
|
||||
3. **Regularly Pull and Rebase:**
|
||||
- Keep your branch up to date with the main branch by regularly pulling and rebasing.
|
||||
|
||||
4. **Review Changes Before Committing:**
|
||||
- Use `git diff` to review changes before staging and committing them.
|
||||
|
||||
### Additional Tools and Resources
|
||||
|
||||
1. **Graphical Interfaces:**
|
||||
- Tools like GitKraken, Sourcetree, or GitHub Desktop can help visualize changes and manage branches.
|
||||
|
||||
2. **Learning Resources:**
|
||||
- Books: "Pro Git" by Scott Chacon and Ben Straub.
|
||||
- Online Courses: GitHub Learning Lab, Codecademy, and Udacity.
|
||||
|
||||
3. **Automation with Git Hooks:**
|
||||
- Automate tasks with Git hooks (e.g., pre-commit, post-commit).
|
||||
```sh
|
||||
# .git/hooks/pre-commit
|
||||
#!/bin/sh
|
||||
npm test
|
||||
```
|
||||
|
||||
Implementing these advanced commands and best practices will help you become more proficient with Git, making version control and collaboration smoother and more efficient.
|
||||
|
||||
---
|
||||
|
||||
Sure, I'll walk you through your Git configuration based on the `.git/config` file you've shown. This file is specific to your Ansible repository and defines settings and rules that Git will follow for this particular repository. Let's break down each section:
|
||||
|
||||
### Core Section
|
||||
|
||||
Reference in New Issue
Block a user