这是我参与8月更文挑战的第6天,活动详情查看:8月更文挑战
在实际的工程项目中,常常需要对改动的代码进行提交到远端仓库中,便于集体开发,故代码我们可以使用git命令进行,其提交代码的具体步骤为:
在上传代码之前需要操作:
- git remote update //此时并不会覆盖你本地的修改
- git rebase //切换到主分支上面即master
- git submodule update //更新子module 做完上述步骤之后:git status //查看文件状态,列出被edit后的文件,即红色显示的部分代码,其中包含完整路径
- git add + 红色部分被修改后代码的完整路径 //此步骤是将工作区的代码添加到暂存区
- git commit //首次将修改后的代码从暂存器提交到本地的master分支中
- git push origin HEAD:refs/for/master //该命令的代表的意思为:git push <远程主机名> <本地分支名>:<远程分支名>
综上:通过以上步骤即完成了对代码的提交,但是值得注意的是:以上过程为代码首次提交时的流程,然而在实际的开发过程或中,一个项目往往由多位开发者合作完成,故大部分我们在改代码的时候,并不是一次修改就可以准确无误的将实际的功能完善好,需要多次的修改代码或者多人修改共同完成,这种情况下的开发,在修改代码时往往第一步是要将远端别人push代码的patch打下来,即使用git fetch + 待修改代码的base link,git fetch是将远程仓库代码的副本拉下来,然后我们在这个副本上进行修改,然后使用git commit --amend + "修改后的文件" 这条命令是以追加的方式commit该文件,此处的comment可以不做任何修改,最后git push到远端即可。
如果以上情况未使用git commit --amend ,而使用git commit 会生成两个commitId,但实际目标只需要一个commitId,
- 解决办法1:可以将代码回退到上一个版本,使用git log 查看,然后使用git reset --hard + "git log查看得出的commitId(需要回退到的地方)" //该命令会将工作区修改的代码清空,但是如果以及commit过代码了就不会修改,git reset --hard 意思是强制回退到制定的代码,实际就是撤销这次的commit;
- 解决办法2:压缩最近一次的commitId,具体操作为:
- git rebase -i "base_commitId"//此处也需要合并两次提交的comment,即保留父版本的changeId. 这里在额外补偿说明下git reset HEAD^ 与 git reset --hard "git log查看得出的commitId(需要回退到的地方)"的区别:
- git reset HEAD^ or git reset HEAD + "待回退代码的绝对路径"//将代码从远端回退到暂存区
- git checkout -- "待回退的文件" //将代码从暂存区回退到工作区
- git reset --hard "git log查看得出的commitId(需要回退到的地方)" //直接将代码从远端回退到工作区