一、 往Gitee仓库中提交本地代码的步骤如下:
-
注册并登录Gitee账号。
-
创建一个新的仓库或选择一个已有仓库。在创建仓库时,可以选择仓库的许可证、是否允许用户上传等问题。
-
将Gitee仓库的地址(例如:https://gitee.com/username/repository.git)复制到本地。
-
在本地安装Git,并执行以下命令初始化仓库:
git init
-
将Gitee仓库地址添加为远程仓库:
git remote add origin https://gitee.com/username/repository.git
-
将本地代码添加到Git仓库:
git add .
-
提交代码到Gitee仓库:
git commit -m "提交说明"
-
将代码推送到Gitee仓库:
git push -u origin master
在 Git 命令中,git push -u origin master 这行命令执行了几个操作,但 - 符号本身并不直接在这行命令中扮演特殊角色。这里的关键元素包括 git push、-u(或 --set-upstream)、origin 和 master。让我们逐一解释:
git push:这是 Git 中用于将本地仓库的更改推送到远程仓库的命令。
-u 或 --set-upstream:这个选项告诉 Git 在推送的同时,将本地分支与远程分支建立跟踪(或称为“上游”)关系。这意呀着,在将来的推送(git push)和拉取(git pull)操作中,Git 会自动知道对应的远程分支,从而简化命令。如果没有这个选项,你可能需要每次推送时都指定远程分支名,或者在拉取时指定远程分支和本地分支的对应关系。
origin:这是远程仓库的默认名称(虽然可以更改,但大多数情况下保持为 origin)。它指定了 git push 命令应该将更改推送到哪个远程仓库。
master:这是你要推送的本地分支的名称。然而,需要注意的是,在 Git 的新版本(特别是 Git 2.28 及以后)中,master 分支的默认名称已经被更改为 main,以反映更加包容和开放的命名方式。因此,如果你使用的是较新版本的 Git,并且没有手动更改默认分支名称,你可能会使用 git push -u origin main 而不是 git push -u origin master。
综上所述,- 符号在这行命令中并不表示任何特定的操作或参数;它是 -u 的一部分,用于指定 --set-upstream 选项,该选项在推送时建立本地分支与远程分支的跟踪关系。以上是往Gitee仓库中提交本地代码的基本步骤,具体操作可能因操作系统、Git版本等因素略有差异。
注:git push -u origin master
和git push
命令在推送仓库时有以下区别:
(1) git push -u origin master
命令会将有标签的分支推送到远程仓库,并将其设置为默认分支。在这个例子中,origin
是远程仓库的名称(可自定义),master
是要推送的分支名称。执行此命令后,远程仓库将包含一个名为master
的分支,并且该分支将成为默认分支。
(2) git push
命令默认将本地分支推送到与本地分支名称相同的远程分支。如果您想要将本地分支推送到远程仓库的默认分支,可以执行以下命令:
git push origin
或者:
git push origin master
这将把本地master
分支推送到远程仓库的默认分支。
总结一下,git push -u origin master
命令主要用于将有标签的分支推送到远程仓库,并将其设置为默认分支。而git push
命令则用于将本地分支推送到远程仓库的默认分支。在实际使用中,您可以根据需要选择合适的命令。如果您想要将本地分支推送到远程仓库的默认分支,可以使用git push origin
或git push origin master
命令。如果您想要将有标签的分支推送到远程仓库并设置为默认分支,可以使用git push -u origin master
命令。
二、push报错
1、! [rejected] master -> master (fetch first)
这个错误提示表明远程仓库(https://gitee.com/yrzyz/msh.git)包含了您本地仓库(当前分支为master)尚未合并的提交。这通常是由于远程仓库的其他分支推送到了与您本地仓库相同的提交,导致远程仓库的提交历史与您本地仓库不同步。
为了解决这个问题,您可以尝试以下步骤:
- 首先,确保您本地仓库的提交历史与远程仓库同步。您可以使用以下命令将远程仓库的最新提交拉取到本地:
这将把远程仓库的最新提交合并到您当前的分支(master)中。git pull https://gitee.com/yrzyz/msh.git master
- 在完成合并后,您可以使用以下命令将本地仓库的提交推送到远程仓库:
如果推送过程中仍然遇到问题,您可以尝试强制推送(使用git push https://gitee.com/yrzyz/msh.git master
--force
选项),但请注意,这可能会覆盖远程仓库的其他提交历史,可能需要谨慎操作。 - 如果您仍然遇到问题,可以尝试与远程仓库的其他开发者沟通,了解他们是否在进行类似的提交操作,或者是否存在其他原因导致您的推送被拒绝。
请注意,推送代码到远程仓库时,确保您的代码符合远程仓库的要求,遵循远程仓库的规范。这样可以避免因不合规的提交导致的错误。
2、! [rejected] master -> master (non-fast-forward)
当你在Git中遇到“! [rejected] master -> master (non-fast-forward)”这样的错误时,通常意味着你试图将本地仓库的master分支推送到远程仓库的master分支,但远程仓库的master分支与你的本地master分支之间存在差异,并且这些差异不能通过简单的“快进”(fast-forward)合并来解决。
这种情况通常发生在以下几种情况:
远程仓库被其他人在你之后更新了:其他协作者可能已经将他们的更改推送到远程仓库,导致远程master分支的HEAD与你本地的HEAD不同。
你在本地分支上进行了合并或变基操作:你可能在本地对master分支进行了合并或变基操作,改变了提交历史,而这些更改在远程仓库中并不存在。
要解决这个问题,你有几个选项:
- 拉取远程更改并合并到你的本地分支
首先,你可以拉取远程仓库的最新更改到你的本地仓库,并尝试合并它们:
git pull origin master
如果合并过程中没有冲突,那么你可以继续推送你的更改:
git push origin master
如果合并过程中有冲突,你需要解决这些冲突,然后提交合并结果,再尝试推送。
- 使用变基而不是合并
如果你更喜欢保持一个线性的提交历史,你可以使用变基来将你的更改应用到远程分支的最新状态上:
git fetch origin
git rebase origin/master
然后,解决可能出现的任何冲突,并完成变基过程。之后,你可以推送你的更改:
git push origin master --force-with-lease
注意:–force-with-lease是一个更安全的选项,它会确保远程仓库的master分支在你开始变基之后没有被其他人更新过。如果没有被更新,则推送成功;如果已经被更新,推送将失败,你需要再次拉取并变基或合并。
- 强制推送(不推荐)
如果你确信远程仓库的更改不重要,或者你正在一个只有你自己在工作的私有仓库上,你可以使用git push的–force选项来强制推送你的更改。但请注意,这将会覆盖远程仓库的master分支的当前状态,并可能导致其他协作者的工作丢失。
git push origin master --force
再次强调,这通常不是一个好的做法,除非你真的知道你在做什么,并且确定这是你想要的。
总之,处理这种情况的最佳实践是先拉取远程仓库的最新更改,并将它们合并或变基到你的本地更改中。这样可以确保你的更改与远程仓库保持同步,并减少冲突和错误的可能性。
三、git add如何正确使用
git add
是一个用于将文件添加到 Git 仓库的命令。以下是 git add
命令的一些常用方式和注意事项:
- 基本用法:将单个文件添加到暂存区
git add file.txt
- 将目录中的所有文件添加到暂存区(不需要递归)
git add .
- 将目录及其子目录中的所有文件添加到暂存区(递归)
git add -r .
- 将多个文件添加到暂存区
git add file1.txt file2.txt
- 使用 wildcard(通配符)添加多个文件
注意:wildcard 通配符在添加文件时会匹配所有符合模式的文件,但不会递归搜索子目录。git add *.txt
- 添加已修改但未提交的所有文件
git add -u
- 添加已修改且已跟踪的文件
git add --all
- 添加特定类型的文件
注意:git add --include pattern.txt --exclude pattern2.txt
--include
和--exclude
参数用于指定要添加或排除的文件。 - 在添加文件之前,使用
git status
命令查看文件状态,确保你要添加的文件已被跟踪。 - 添加文件后,使用
git commit
命令提交更改,并为提交添加描述性的提交信息。
git commit -m "Add files"
- 如果你在添加文件时遇到了问题,例如文件已存在或无法添加,请检查文件权限和路径是否正确。
总之,git add
命令用于将文件添加到暂存区,以便在后续提交中将其推送到远程仓库。正确使用git add
命令有助于确保你的代码库保持整洁和有序。在添加文件时,请确保文件已跟踪,并遵循合适的提交规范。
四、配置用户名与邮箱
按照以下步骤操作:
-
打开命令行或终端。
-
运行以下命令以全局配置用户名和邮箱:
git config --global user.name "Your Name" git config --global user.email "your.email@example.com"
请将 “Your Name” 和 “your.email@example.com” 替换为你实际的用户名和邮箱。
-
运行
git commit --amend --reset-author
命令以更新本次提交的作者信息。这个命令将提示你重新输入提交信息,包括作者姓名和邮箱。git commit --amend --reset-author
在弹出的编辑器中,输入新的提交信息,然后保存并关闭编辑器。这将更新本次提交的作者信息。
-
提交更改:
git push
完成这些步骤后,你应该可以看到新的提交信息,其中包含正确的用户名和邮箱。
注意:在某些情况下,你可能需要重启 Git 客户端以使配置生效。
此外,你可以使用git config --global --list
命令查看全局配置的详细信息,确保用户名和邮箱已正确设置。
五、查看本地仓库关联的gitee远程仓库地址
要查看本地仓库关联的 Gitee 远程仓库地址,请按照以下步骤操作:
- 打开命令行或终端。
- 进入你的本地仓库目录。例如,如果你的本地仓库位于
/Users/username/my_repo
,请在命令行中输入:cd /Users/username/my_repo
- 使用以下命令查看本地仓库的远程仓库地址:
这个命令将显示本地仓库的所有远程仓库及其地址。注意,你需要使用 Gitee 的 SSH 协议来进行远程仓库操作。git remote -v
- 从输出中找到 Gitee 远程仓库的地址。地址通常以
git@gitee.com:username/repo.git
格式显示。这就是你要查看的远程仓库地址。
例如:
在这里,origin git@gitee.com:username/repo.git (fetch) origin git@gitee.com:username/repo.git (push)
origin
是远程仓库的名称,username
是你的 Gitee 用户名,repo
是你的仓库名称。
通过这些步骤,你就可以查看本地仓库关联的 Gitee 远程仓库地址。在后续操作中,你可以使用这个地址将本地仓库与远程仓库关联,并进行推送和拉取操作。
fetch:表示该远程仓库支持获取(拉取)代码。当你想在本地仓库中查看或下载远程仓库的代码时,可以使用这个功能。在你使用 git pull 命令时, Git 会自动从远程仓库获取代码。
push:表示该远程仓库支持推送(上传)代码。当你在本地仓库中对代码进行修改并希望将这些更改推送到远程仓库时,可以使用这个功能。在你使用 git push 命令时, Git 会自动将本地仓库的更改推送到远程仓库。
六、git clone/fetch/checkout
git clone
、git fetch
、git checkout
是Git版本控制系统中常用的三个命令,它们各自承担着不同的功能和作用。以下是这三个命令的区别和主要用途:
1. git clone
功能:
git clone
命令用于将远程仓库(如Gitee、GitHub等)的内容克隆到本地计算机上,包括仓库中的所有分支、标签、提交历史等。- 克隆操作会创建一个新的本地仓库,并自动设置远程仓库的跟踪信息。
用法:
- 基本用法:
git clone <远程仓库的URL>
。例如:git clone https://gitee.com/username/repo.git
。 - 可以选择性地指定本地目录名作为第二个参数。
特点:
- 是一个从无到有的克隆操作,不需要在本地先初始化仓库(
git init
)。 - 克隆后,本地仓库会包含远程仓库的所有分支和提交历史。
2. git fetch
功能:
git fetch
命令用于从远程仓库获取最新的代码和提交信息,但不会自动合并到当前工作分支。- 它会将远程仓库的最新状态下载到本地的
.git
目录中,但不会自动修改工作目录中的文件。
用法:
- 基本用法:
git fetch <远程仓库名> <分支名>
。如果不指定分支名,则默认获取所有分支的最新状态。 - 例如:
git fetch origin master
会从名为origin
的远程仓库获取master
分支的最新状态。
特点:
- 不会自动合并代码,需要手动执行
git merge
或git rebase
来合并或变基。 - 相比
git pull
,git fetch
提供了更多的灵活性和安全性,因为它允许用户在合并之前先查看和评估更新内容。
3. git checkout
功能:
git checkout
命令用于切换分支或恢复工作目录中的文件。- 在Git 2.23版本之后,
git switch
和git restore
命令分别取代了git checkout
的分支切换和文件恢复功能,但git checkout
仍然可用且广泛支持。
用法:
- 切换分支:
git checkout <分支名>
。 - 恢复文件:
git checkout -- <文件路径>
(注意--
是必须的,以避免与分支切换混淆)。
特点:
- 在Git 2.23及以后版本中,推荐使用
git switch
来切换分支,使用git restore
来恢复文件。 git checkout
在切换分支时,会尝试将工作目录和暂存区的内容更新为指定分支的状态。
总结
git clone
用于克隆远程仓库到本地。git fetch
用于从远程仓库获取最新状态,但不自动合并。git checkout
(或git switch
/git restore
)用于切换分支或恢复文件。这三个命令在Git版本控制中扮演着不同的角色,共同支持着版本控制的核心功能。