Git技巧、备忘录

1. 设置了错误的远程仓库

git remote -v
git remote set-url origin {{url}}

2. Github Fork 的项目同步源项目更新

git remote add upstream {{url}}
 
# 第一种
git fetch upstream
git merge upstream/master
 
# 2.第二种
git pull upstream main

3. 提交信息写错

git commit --amend --only
git commit --amend --only -m 'xxx'

4. 提交时用了错误的用户名或邮箱

git commit --amend --no-edit --author 'v5sollee <[email protected]>'

或者

git config --global author.name v5sollee
git config --global author.email [email protected]
git commit --amend --reset-author --no-edit

5. 不想要最后一次提交

如果已经推送了

git reset HEAD^ --hard
git push --force-with-lease [remote][branch]

如果还没有推送

git reset --sort HEAD@{1}

6. 提交的内容需要修改怎么办?例如提交了敏感信息

修改或删除

# 编辑后 add
git rm sensitive_file
# 或删除
git rm sensitive_file
# 或只从 git 里删,但保留在本地,记得在 .gitignore 里加上它
git rm --cached sensitive_file

然后

git commit --amend --no-edit
git push --force-with-lease origin [branch]

Git commit 之后还没有 push,发现 commit 信息写错了,如果撤销这次 commit 信息重新 commit,如果只是简单的需要修改 commit 信息

git commit --amend # 进入编辑器
git commit --amend -m "新的提交信息" # 不进入编辑器

如果你还没有 push 到远程仓库,修改后的提交不会有任何冲突。接下来只需推送即可:

git push origin branch-name

如果你已经推送了错误的提交信息,但需要修改它,则需要强制推送:

如果你已经推送了错误的提交信息,但需要修改它,则需要强制推送:

7. 在上一次提交的基础上增加改动

git commit --amend

8. 放弃本地未提交的修改

# 删除所有的 staged 改动
git reset --hard HEAD
# 删除所有未 staged 改动
git clean -fd
# 加 -x 参数可删除所有 ignored 的文件
git clean -fdx

9. 不小心删除了分支怎么办

# 找到被删除的分支的 hash 值
git reflog
git checkout -b xxx
git reset --hard {{hash}}

10. 删除分支操作

# 删除远程分支
git push origin --delete [branch]
# 删除本地分支
git branch -d [branch]
# 删除没有被合并的分支要用 -D
git branch -D [branch]
# 批量删除分支
git branch | grep 'fox/' | xargs git branch -d

11. 在错误的分支上做了修改但未提交

git stash
git checkout [branch]
git stash pop

12. 在错误的分支上做了修改同时已提交

# 新建分支
git branch xxx
# 删除 master 分支的最后一次 commit
git reset HEAD~ --hard
# 删除的 commit 会切换到 xxx 分支上
git checkout xxx

13. 如果撤销一个之前的提交

# 找到要撤销的 commit hash
git log 或者 git reflog
# 回滚
git revert [hash]

14. 撤销某一个文件的修改

# 找到要文件修改的前一个  commit hash
git log 或者 git reflog
# 回滚文件
git checkout [hash] path/to/file

15. Git 被搞乱了,想要重新来过

第一种

cd ..
rm -rf fucking-repo-dir
git clone https://github.com/fucking-repo-dir.git
cd fucking-repo-dir

第二种

git fetch origin
git checkout master
git reset --hard origin/master
git clean -d --force

16. 提交空的 commit

如果你需要重新出发 CI 构建,常见的情况时通过小幅度修改 README 来触发 GIt 变更,然后提交后触发 CI 执行。

git commit --allow empty -m 'it works!'

此命令允许你出发无内容的提交,不会 git diff 显示任何更改

17. 美化日志展示

git log --pretty=oneline --graph --decorate --all

18. 清理本地分支

删除已从远程仓库中删除的任何本地分支

git config --global fetch.prune true

手动删除,删除已经合并到主分支的本地分支

git branch --merged master | grep -v "master" | xargs -n 1 git branch -d

19. git add -p 暂存提交

除了使用 git add . 之外,还可以使用 git add -p 来打开一个交互式提示,向你展示每个文件已更改的部分,并为你提供咱村、跳过等选项。

20. git stash -p

git add -p 类似 git stash -p 也可以通过交互式命令来 stash 每一个更改

21. 使用表情符号

git commit -m ":package: Add a docker container to the app"

Gitmoji

999. 参考