Appearance
Git 常用操作
About 968 wordsAbout 3 min
2022-06-02
git 命令太多总是记不住,没关系,不用记住所有的命令,认真记住这些常用的命令,就可以解决很多问题了。
常见错误
refusing to merge unrelated histories
git merge origin/master --allow-unrelated-histories
文件命令
强制从某个分支的代码更新本地代码
git reset --hard origin/master
取消跟踪文件
# 从暂存区移除 git rm --cached filename # 从暂存区和工作区删除 git rm filename # 如果工作区中有修改,这时候需要强制移除 git rm -f filename
回滚某个文件
git checkout HEAD filename
reset 提交
git reset
是一个强大的命令,用于撤销更改或移动 HEAD 和分支引用。它有几种不同的模式,每种模式对工作目录、暂存区和提交历史的影响不同。以下是 git reset
的详细解释:
基本语法:
git reset [<mode>] [<commit>]
主要模式:
--soft
- 移动 HEAD 到指定的提交。
- 不改变暂存区和工作目录。
- 所有改动保持为"待提交"状态。
git reset --soft <commit>
--mixed(默认模式)
- 移动 HEAD 到指定的提交。
- 重置暂存区,但不改变工作目录。
- 所有改动保持为"未暂存"状态。
git reset [--mixed] <commit>
--hard
- 移动 HEAD 到指定的提交。
- 重置暂存区和工作目录。
- 谨慎使用,会丢失未提交的更改。
git reset --hard <commit>
常用参数:
HEAD~n
: 回退 n 个提交。<commit-hash>
: 回退到特定的提交。--
: 用于分隔提交和文件路径。
特殊用法:
撤销暂存(unstage):
git reset [--mixed] HEAD <file>
保留工作目录的更改,但撤销最近的提交:
git reset HEAD~1
完全撤销最近的提交,包括工作目录的更改:
git reset --hard HEAD~1
移动分支指针,不影响 HEAD:
git reset --soft <other-branch>
注意事项:
--hard
模式会永久删除更改,使用时要非常小心。- 如果已经推送到远程仓库,重置后需要强制推送 (
git push --force
),这可能会影响其他协作者。 - 对于已经推送的公共提交,最好使用
git revert
而不是git reset
。
git reset
是一个非常灵活的工具,可以用来管理提交历史、暂存区和工作目录。理解不同模式的作用对于有效使用 Git 非常重要。
分支和仓库
查看远程地址并设置新地址
git remote -v
新建、切换和删除分支
# 新建分支 git branch [name] # 切换分支 git checkout [name] # 新建并切换分支 git checkout -b [name] # 删除本地分支 git delete [name] # 删除远程分支 git push [origin] :[name]
合并分支
git merge [name]
关联本地分支与远程分支
git branch --set-upstream-to=origin/[remote_branch_name] [local_branch_name]
删除所有未关联远程的本地分支
git branch -vv | grep ': gone]' | awk '{print $1}' | xargs git branch -D
从某个提交切出新分支
git checkout -b [new-branch-name] [commit]
标签
# 新增轻量级标签
git tag <tag_name>
# 新增带注释的标签
git tag -a <tag_name> -m "Tag message"
# 推送 tag
git push --tags
# 单独推送某个 tag
git push origin <tag_name>
# 删除标签
git tag -d <tag_name>
配置信息
用户名和邮箱
查看配置用户名和邮箱
git config user.name
qiqiang
git config user.email
qiqiangvae@foxmail.com
配置 --global
表示全局有效,去除该选项表示对当前仓库有效。
# 配置用户名
git config --global user.name "qiqiang"
# 配置邮箱
git config --global user.email "qiqiangvae@foxmail.com"
代理
查看当前代理配置
git config --global --get-all http.proxy
git config --global --get-all https.proxy
设置代理配置
git config --global http.proxy http://代理服务器IP:代理服务器端口
git config --global https.proxy http://代理服务器IP:代理服务器端口
中文乱码
git config --global core.quotepath false