Git常用命令及问题

Git常用操作命令

发布:2023-11-05     分类:工具使用     标签:工具Git 阅读:183     评论:0

一. 初始配置

1. 账号邮箱配置

git config --global user.name test
git config --global user.email test@test.com

2. alias简写配置

在Git中,你可以使用alias(别名)来为常用的Git命令创建简写配置。通过别名,你可以用更短、更简洁的方式执行常用的Git操作。

2.1 使用git config命令配置别名:

git config --global alias.cp cherry-pick
git config --global alias.co checkout
git config --global alias.ci commit
git config --global alias.br branch
git config --global alias.st status

上述命令将创建了三个别名:cp代表cherry-pick命令,co代表checkout命令,br代表branch命令,ci代表commit命令,st代表status命令。你可以根据自己的喜好和习惯配置其他别名。

2.2 直接编辑Git的配置文件

通过编辑~/.gitconfig文件(对于Windows用户来说,是C:\Users\你的用户名.gitconfig),你可以手动添加别名的配置。在文件中添加如下内容:

[alias]
    co = checkout
    br = branch
    ci = commit

同样的,上述配置会创建三个别名。

这样配置之后,你可以使用简写的命令来执行相应的Git操作。例如,git co相当于git checkout,git br相当于git branch,git ci相当于git commit。

注意,通过--global选项配置的别名将适用于全局范围,即在你的所有Git仓库中都可使用。如果你只想在当前仓库中使用别名,可以省略--global选项,然后在仓库的.git/config文件中添加别名配置。

3. warning: LF will be replaced by CRLF

该警告表示在Git中发现了换行符的不一致性。在Windows系统中,默认使用CRLF(回车加换行符)作为行尾符,而在Unix/Linux系统中,默认使用LF(换行符)作为行尾符。

这个警告通常出现在跨平台协作或在不同平台上使用Git时,例如在Windows和Unix/Linux之间切换。

Git会自动进行换行符的转换,以便确保文件在不同系统上的一致性。在这种情况下,Git发现你的代码中使用了LF作为行尾符,但它将被转换为CRLF。

虽然这个警告不会影响代码的功能性,但如果你希望避免这个警告,可以采取以下几种解决方案之一:

忽略警告(不推荐):你可以通过设置Git配置来忽略该警告,但这并不是一个推荐的做法,因为它可能导致行尾符不一致性的问题。在Git命令行中运行以下命令以忽略警告:

git config --global core.safecrlf false

转换行尾符为LF:如果你在Windows上开发,可以考虑将行尾符转换为LF。在Git命令行中运行以下命令:

git config --global core.autocrlf input

转换行尾符为CRLF:如果你在Unix/Linux上开发,并且希望行尾符被转换为CRLF,可以运行以下命令:

git config --global core.autocrlf true

根据你的开发环境和需求,选择适合的解决方案,并确保在团队协作时所有成员都使用相同的换行符设置,以避免不必要的换行符警告。

4. git:windows中文名称、路径变成xx%解决

当在Windows中使用Git时,如果Git的文件名或路径中包含中文字符,有时会出现被编码为xx%的情况。这是因为在Windows中,默认情况下,Git使用UTF-8编码,而Windows使用的是ANSI编码。

要解决这个问题,你可以进行以下设置:

设置Git的文件名和路径编码:在Git Bash中,运行以下命令来将Git的文件名和路径编码设置为UTF-8:

git config --global core.quotepath false

设置Windows系统的本地编码:如果Git的文件名和路径还是显示为xx%,则需要确保Windows系统的本地编码设置与Git的编码一致。你可以按照以下步骤更改Windows系统的本地编码为UTF-8:

在桌面上右键点击"开始"按钮,并选择"运行"。
输入regedit并按下回车键,打开注册表编辑器。
导航到以下路径:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Nls\CodePage。
双击右侧窗口中的"ACP",将数值数据更改为"65001"。
关闭注册表编辑器,并重新启动计算机使更改生效。

通过上述设置,Git应该能够正确地处理中文字符的文件名和路径,避免出现xx%的情况。

5. git代理配置

要在Git中配置代理,你可以通过以下几种方式

方式一:使用git config命令配置代理:在Git命令行中,运行以下命令来配置代理:

# 设置HTTP代理
git config --global http.proxy <代理地址>

# 设置HTTPS代理
git config --global https.proxy <代理地址>

将<代理地址>替换为你的代理服务器地址,包括主机名和端口号。例如,如果代理服务器位于proxy.example.com的端口8888上,命令将如下所示:

git config --global http.proxy http://proxy.example.com:8888
git config --global https.proxy http://proxy.example.com:8888

要清除已配置的代理,可以使用以下命令:

git config --global --unset http.proxy
git config --global --unset https.proxy

方式二:编辑.gitconfig文件:手动编辑~/.gitconfig文件(对于Windows用户来说,是C:\Users\你的用户名.gitconfig),并添加以下内容:

[http]
    proxy = <代理地址>
[https]
    proxy = <代理地址>

将<代理地址>替换为你的代理服务器地址,与上述命令相同。

在配置代理之后,Git将通过指定的代理服务器进行HTTP和HTTPS通信。这对于需要通过代理访问远程仓库或下载依赖项的场景非常有用。

确保代理服务器的地址和端口号正确,并在需要时提供代理的用户名和密码,以便成功连接到代理服务器。如果你的代理服务器需要身份验证,参考代理服务器的文档来获取详细配置说明。

二. git配置.gitignore操作

1. git移除指定目录版本控制

如果你想要移除 Git 版本控制系统中的某个指定目录,可以按照以下步骤进行操作:

1.通过 cd 命令进入该 Git 仓库所在的目录。

2.执行以下命令,将需要移除版本控制的目录添加到 .gitignore 文件中,例如,如果你想要移除名为 example 的目录,可以执行以下命令:

echo "example/" >> .gitignore

注意,如果 .gitignore 文件还不存在,可以通过以下命令创建:

touch .gitignore

3.执行以下命令,删除版本库中的指定目录,但不删除本地文件:

git rm -r --cached example

这条命令会将 example 目录从 Git 版本库中删除,并从 Git 跟踪列表中删除。注意,使用 --cached 选项来仅仅删除 Git 跟踪列表,而不会删除本地文件。

4.执行以下命令,提交修改:

git commit -m "Remove example directory from version control"

这条命令会提交修改并添加一个提交信息,告诉 Git 你已经从版本控制中移除了 example 目录。

5.执行以下命令,推送修改:

git push

这条命令会将修改推送到远程仓库。

现在,example 目录已经被从版本控制中移除了。注意,这些操作不会删除本地文件,只会从 Git 版本控制系统中移除指定目录。如果需要删除本地文件,可以手动删除它们。

2. 只忽略指定目录下的文件,不忽略目录

在.gitignore文件中,可以忽略指定目录下的文件,不忽略目录。但是,如果该目录下没有任何文件被跟踪,Git将不会包括该目录。在Git中,只有跟踪的文件才会被提交。

如果你想要提交一个空目录,可以在该目录中添加一个.gitkeep文件,并将其添加到版本控制中。.gitkeep文件不需要任何内容,它只是作为一个标记来确保Git跟踪该目录。

举个例子,在.gitignore中,忽略指定目录下的所有文件,但不忽略该目录下的:

/my_directory/*
!/my_directory/.gitkeep

这样,在提交时,my_directory目录和.gitkeep文件将被包括在版本控制中。

三. git分支操作

1. git删除远程分支

要删除 Git 远程分支,可以使用以下命令:

git push <remote_name> --delete <branch_name>

其中, 是你的远程仓库名称,一般为 origin; 是你要删除的分支名称。

例如,要删除名为 my-feature-branch 的远程分支,可以使用以下命令:

git push origin --delete my-feature-branch

执行完毕后,该分支就会被从远程仓库中删除。

四. 常见问题

代码同时提交多个Git远程仓库

查看Git仓库

首先查看Git代码绑定了哪些Git仓库

git remote -v

如果当前代码没有绑定远端Git仓库,需要先确定Pull会从哪个仓库Pull,之后运行如下命令

git remote add origin https://gitee.com/test/test123.git

绑定多个远端仓库

之后再绑定另外一个远端仓库,使Push的时候能同时Push两个仓库

git remote set-url --add origin https://github.com/test/test123.git

这个时候查看远端仓库信息会有两个Push的远程仓库

$ git remote -v
orgin   https://github.com/test/test123.git (fetch)
orgin   https://github.com/test/test123.git (push)
orgin   https://gitee.com/test/test123.git (push)

之后再进行提交即可,会将代码同时Push到两个远程仓库中。

如果本地分支与远程分支存在追踪关系,可以使用以下命令直接推送当前分支的更改到与之关联的远程分支,而无需显式指定分支和仓库名称

git push

移除指定远端仓库

git绑定多个远端仓库后,要移除 Git 中绑定的指定远程仓库,可以使用以下命令:

git remote remove <remote-name>

其中, 是要移除的远程仓库的名称。例如上一步用的分支是“orgin”,这块就填orgin。 步骤如下:

第一步:打开终端或命令行窗口,进入包含 Git 仓库的目录。

第二步:运行上述命令,将 替换为要移除的远程仓库的名称。例如,如果要移除名为 "origin" 的远程仓库绑定,可以运行:

git remote remove origin

第三步:运行命令后,Git 将会移除指定的远程仓库绑定。此时如果所有远程仓库的分支都是一个,那么得重新配置仓库了

注意:移除远程仓库绑定并不会删除远程仓库本身,它只是从本地 Git 仓库的配置中移除对应的远程仓库绑定信息。

提交未提交的更改

报错

git合并报错:your local changes would be overwritten by cherry-pick. hint: commit your changes or stash them to proceed. cherry-pick failed

这个错误信息是因为在执行git cherry-pick命令时,Git 发现你的本地分支上存在未提交的更改,而这些更改可能会被cherry-pick覆盖掉。为了解决这个问题,可以看以下几个解决选项:

解决

如果你的本地分支上的更改是你想要保留的,可以先提交这些更改,然后再执行cherry-pick操作。执行以下命令:

git add .
git commit -m "Committing local changes before cherry-pick"
git cherry-pick <commit-hash>

上述命令中的是你想要进行cherry-pick的提交的哈希值。

使用git stash

如果你不打算立即提交本地更改,但想要将它们暂时保存起来,可以使用git stash命令。执行以下命令:

git stash save "Stashing local changes before cherry-pick"
git cherry-pick <commit-hash>

这会将你的本地更改存储在一个临时的"stash"中,然后执行cherry-pick。完成cherry-pick后,你可以使用git stash pop或git stash apply来重新应用暂存的更改。

放弃本地更改

如果你不关心本地更改,想要完全放弃它们,可以使用以下命令来重置工作区:

git reset --hard HEAD
git cherry-pick <commit-hash>

注意:这会丢失所有未提交的更改,包括未跟踪的文件。

选择哪种方法取决于你的需求和更改的重要性。确保在执行任何操作之前,你都理解了潜在的影响,并备份了必要的更改。

更新:2026-05-01
点击评论
评论区