【Git常用命令总结-提交代码】

一、常用的提交代码流程

以下是一些Git常用的分支推送相关命令:

1、查询本地仓库当前分支

  • 命令git branch
  • 说明:列出本地所有分支,当前所在分支前会有一个*号标识。

2、切换分支

如有必要则使用下面命令切换到指定分支
  • 命令git checkout <branch_name>
  • 说明:切换到指定的分支。如果该分支不存在,会切换失败。如果要创建并切换到新分支,可以使用git checkout -b <new_branch_name>

3、拉取指定远程仓库分支

协同开发时,建议提交代码前先拉取远程分支,防止变更冲突。如有冲突可以先把自己的代码暂存。
  • 命令git pull <remote_name> <branch_name>
  • 说明:从指定的远程仓库拉取指定分支的代码,并将其合并到当前本地分支。其中<remote_name>通常是origin,表示默认的远程仓库。

4、提交本地代码到指定远程分支

  • 提交暂存区的内容到本地分支
    • 命令git commit -m "<commit_message>"
    • 说明:将暂存区的内容提交到本地分支,<commit_message>是本次提交的描述信息,用于说明本次修改的内容等。(一般描述前可以添加上提交标识,以便团队成员更好地理解代码变更意图,eg:refactor:词库插入新分词使用二分查找替换线性查找。 具体有哪些标识,后面会详细介绍)
  • 将本地分支的提交推送到指定远程分支
    • 命令git push <remote_name> <local_branch_name>:<remote_branch_name>
    • 说明:将本地分支<local_branch_name>的提交推送到远程仓库<remote_name><remote_branch_name>分支。如果本地分支名和远程分支名相同,可以简化为git push <remote_name> <branch_name>

5、推送本地代码到远程仓库分支

  • 先将本地代码添加到暂存区
    • 命令git add <file_path>git add.
    • 说明git add <file_path>用于将指定文件添加到暂存区,git add.则会将当前目录下的所有更改文件添加到暂存区。
  • 然后按上述“提交本地代码到指定远程分支”的步骤操作
    • 先执行git commit -m "<commit_message>"提交到本地分支。
    • 再执行git push <remote_name> <local_branch_name>:<remote_branch_name>推送到远程分支。

二、git pull详解

git pull是用于从远程仓库拉取代码并合并到当前本地分支的重要命令,其基本语法git pull <remote_name> <branch_name>有如下作用和相关信息:

作用

  • 从指定的远程仓库<remote_name>拉取指定分支<branch_name>的最新代码,并尝试将其合并到当前所在的本地分支。比如,当前在本地的main分支,执行git pull origin dev,就会从名为origin的远程仓库拉取dev分支的代码,并尝试合并到本地main分支。

执行过程

  • 远程分支跟踪信息获取:Git首先会根据<remote_name><branch_name>确定要拉取的远程分支的位置和相关信息。它会参考本地保存的远程仓库配置信息,找到对应的远程服务器地址以及指定分支的名称。
  • 远程代码拉取:Git与远程仓库建立连接,从远程服务器上获取指定分支<branch_name>的最新提交记录和文件更改。
  • 合并到本地分支:拉取完成后,Git会尝试将拉取到的代码合并到当前本地分支。如果没有冲突,Git会自动进行合并,并更新本地分支的指针,使其指向新的合并后的提交。

与其他命令的关联

  • git pull实际上是git fetchgit merge两个命令的组合操作。git fetch负责从远程仓库获取最新的提交记录,但不会自动合并到本地分支,而git merge用于将获取到的远程分支与当前本地分支进行合并。使用git pull就相当于先执行git fetch <remote_name> <branch_name>获取远程分支的更新,然后执行git merge <remote_name>/<branch_name>将获取到的更新合并到当前本地分支。

可能出现的问题及解决方法

  • 合并冲突:如果本地分支和远程分支在相同文件的相同位置有不同的修改,就会产生合并冲突。这时Git无法自动完成合并,需要手动解决冲突。可以通过编辑器打开冲突文件,按照Git标记的冲突区域,手动修改文件内容,保留正确的修改,删除冲突标记,然后使用git add命令将解决冲突后的文件添加到暂存区,最后执行git commit完成合并提交。
  • 权限问题:如果没有拉取远程分支的权限,会收到权限拒绝的错误提示。这种情况下,需要联系远程仓库的管理员,请求获取适当的权限。
  • 网络问题:在拉取过程中,如果网络连接不稳定或中断,可能导致拉取失败。可以检查网络连接,重新执行git pull命令。

三、git cherry-pick命令优选指定的提交内容

在Git中除了使用git pull命令拉取代码,还可使用git cherry-pick命令来优选指定的提交内容,将一个或多个提交从一个分支应用到当前分支。其使用方法及相关注意事项如下:

基本语法

git cherry-pick <commit-hash>,其中<commit-hash>是要优选的提交的哈希值,是提交的唯一标识符。

操作步骤

  1. 查找提交哈希值:可通过git log命令查看提交历史,找到要优选的提交的哈希值。如:
git log --oneline

该命令会以简洁的格式列出提交历史,每行显示一个提交的简短哈希值和提交信息,从中找到目标提交的哈希值。

  1. 切换到目标分支:确保切换到要应用优选提交的分支,可使用git checkout <branch-name>命令。如要将提交优选到master分支,可执行:
git checkout master
  1. 执行优选操作:使用git cherry-pick命令加上提交哈希值来优选指定提交。如要优选哈希值为abc123的提交,可执行:
git cherry-pick abc123

Git会将该提交引入到当前分支,应用提交所包含的更改。

处理冲突

如果优选的提交与当前分支的内容有冲突,Git会暂停cherry-pick操作并提示冲突。需手动解决冲突,即打开有冲突的文件,编辑内容,保留需要的部分,然后使用git add命令将解决冲突后的文件标记为已解决,最后执行git cherry-pick --continue继续优选操作。

批量优选

若要优选多个连续的提交,可使用提交范围。如要优选从abc123def456之间的所有提交(包括abc123def456),可执行:

git cherry-pick abc123..def456

若要优选多个不连续的提交,可在命令中列出多个提交哈希值,以空格分隔。如:

git cherry-pick abc123 def456 ghi789

其他参数说明

  • --no-commit:只应用提交的更改,但不自动创建新的提交,可用于在应用更改后进行一些额外的修改或检查,再手动提交。
  • --strategy:指定处理冲突的策略,如--strategy=recursive,可使用递归合并策略处理冲突。

git cherry-pick和git pull的区别

git cherry-pickgit pull是Git中两个不同的命令,它们的功能、应用场景等都有所不同,具体区别如下:

  • 功能

    • git cherry-pick:用于将指定的一个或多个提交从一个分支复制到当前所在分支。它会把选定提交所包含的更改应用到当前分支,并在当前分支创建一个新的提交,新提交的内容和选定提交的内容相同,但提交哈希值等信息会不同。
    • git pull:用于从远程仓库获取最新的代码,并将其合并到当前所在分支。它实际上是git fetchgit merge两个命令的组合,先从远程仓库下载最新的提交记录到本地的远程跟踪分支,然后将远程跟踪分支的内容合并到当前分支。
  • 操作对象

    • git cherry-pick:主要操作的是本地的提交记录,可以在本地的不同分支之间选择特定的提交进行复制和应用。
    • git pull:主要操作的是远程仓库和本地分支之间的交互,用于获取远程仓库的最新代码并更新本地分支。

四、如何撤回提交的代码

git commit后和git push后撤回提交的方法如下:

git commit后撤回提交

  • 使用git reset命令
    • 软重置(Soft Reset):执行git reset --soft HEAD~<n>,将提交记录回退,暂存区和工作目录内容不变,<n>为回退提交次数,撤回最近一次提交可执行git reset --soft HEAD~1
    • 混合重置(Mixed Reset)git reset HEAD~<n>为默认行为,回退暂存区内容,工作目录文件不变,变为未暂存状态,如git reset HEAD~1撤回最近提交,更改回到工作目录为未暂存状态。
    • 硬重置(Hard Reset)git reset --hard HEAD~<n>会回退暂存区和工作目录的所有更改,丢弃指定提交之后的所有更改,git reset --hard HEAD~1可彻底撤回最近一次提交,但可能导致未提交工作丢失。
  • 使用git stash命令:先执行git stash save "optional-message"保存当前更改,再git reset --hard HEAD将HEAD指针重置为上一次提交状态,实现撤回提交,若后续要使用保存的更改,可通过git stash pop恢复。

git push后撤回提交

  • 使用git revert命令:执行git revert <commit-hash>创建撤销提交,<commit-hash>为要撤回的提交哈希值,编辑提交信息后保存,再git push origin <branch-name>将撤销提交推送到远程仓库,<branch-name>为分支名称。此方法不改变原有提交历史,适合团队协作,但撤回多个提交较繁琐。
  • 使用git reset命令结合git push:先git reset --hard HEAD~<n>回退到指定提交,再git push origin <branch-name> --force强制推送本地状态覆盖远程仓库状态。此方法可快速回退远程仓库状态,但会改变提交历史,可能导致团队协作问题,请谨慎操作哦O(∩_∩)O~。
    • 为什么使用git reset命令结合git push origin <branch-name> --force这种方式?
      首先要知道本地与远程仓库的关系,Git 是分布式版本控制系统,本地仓库和远程仓库是相互独立又需要保持同步的。git reset --hard HEAD~<n>只是在本地回退到了指定提交,此时本地仓库的状态与远程仓库的状态已经不一致了,远程仓库仍然保留着被回退掉的那些提交记录。
    • 为了使远程仓库的状态与本地一致,也就是实现撤回远程仓库上已推送的提交,就需要使用git push命令将本地回退后的状态推送到远程仓库。而--force参数是必不可少的,因为默认情况下,Git 不允许将本地的提交历史覆盖远程仓库中已经存在的、且提交记录不同的历史。加上--force参数后,就会强制推送本地的状态,让远程仓库的提交历史按照本地的情况进行更改,从而达到撤回远程仓库上指定提交的目的啦~
  • 使用git rebase -i命令结合git push:执行git rebase -i HEAD~<n>,在文本编辑器中把要撤回提交前的pick改为drop,保存关闭编辑器完成变基,然后git push origin <branch-name> --force将变基结果推送到远程仓库。此方法可灵活操作多个提交,但同样会改变提交历史,使用时需与团队成员沟通。

使用IDE集成工具代替命令

如果你用的是代码编译工具,以IntelliJ IDEA为例,打开项目,切换到Version Control面板,找到Git操作界面,在提交历史记录中找到要撤回的提交记录,右键点击选择Reset或Revert选项,按提示确认,IDE自动执行撤回操作,效果和上面的git命令一样哦。
IntelliJ IDEA撤回提交

### 使用 Git 提交代码 为了使用 Git 提交代码,一系列特定的命令需要被执行来确保更改被记录并推送到远程仓库。 当准备提交文件到版本库时,先要获取最新的更新以避免冲突。这可以通过运行 `git pull origin main` 或者针对其他分支如 `master` 来实现[^1]。 接着,添加想要跟踪的新文件或修改过的文件至暂存区。此操作通过指令 `git add -A` 完成,该命令会将所有未追踪以及已修改的文件加入到即将提交的内容之中。 创建一个新的提交对象,保存当前工作目录的状态变更,并附带一条描述性的消息以便日后查阅。可以利用 `-m` 参数紧跟双引号内的信息快速完成这一过程,例如 `$ git commit -m "Fix typo in introduction to user guide"` [^2]。 查看最近一次提交的信息概览,可通过执行 `git log` 命令获得更详细的日志条目列表[^3]。 最后一步是推送本地所做的改动到远端服务器上的指定分支上,通常情况下是指定为默认上游分支的方式来进行首次推送设置:`git push -u origin master` 。 ```bash # 更新最新代码 git pull origin master # 添加所有更改后的文件到暂存区 git add -A # 创建新提交,提供简短说明作为参数传递给-m选项 git commit -m 'Your descriptive message here' # 查看最后一次提交详情 git log # 将本地提交同步到远程仓库 git push -u origin master ``` #### 注意事项 - 替换 `'Your descriptive message here'` 为你自己的实际提交备注。 - 如果目标不是 `master` 分支,则应相应调整分支名称部分。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值