首次提交代码
在提交代码前注意自己的本地分支是否已经更新到最新版本并查看所在分支是否正确,如果不处在对应分支则需要使用git checkout 分支名 切换到对应分支。
通过以下命令查看当前所在分支和工作区、暂存区中的变化
git status
git status会显示当前所处的本地分支和对应的远程分支。本地分支显示的分支名称是当时使用git branch 分支名 命令创建本地分支时所自定义的名称。该名称一般与对应的远程分支名相同,以便联系起来。
创建本地分支还可以使用
git checkout -b 分支名
命令。该命令会在创建完分支后自动切换到该分支上。
此外通过git branch -a命令可以更直观的看到当前所在分支。
如果本地分支不为最新版本,通过以下命令进行同步
git pull
如果提示error:您对下列文件的本地修改将被合并操作覆盖:文件名。则说明指定的文件与远端分支上的文件存在差异
此时需要回退文件版本(注意在文件回退前做好备份!!!),存在以下几种情况:
1.文件在工作区已修改,但并未提交到暂存区(即并没有add)
撤销单个文件在工作区的修改,使用下面命令:
git checkout 文件名
若想撤销工作区中所有文件的修改,使用下面命令:
git checkout .
注意:git chekcout 是让文件回到上一次该文件git commit或git add时的状态。也就是说如果该文件是第一个版本在此之前没有其它版本则执行该命令会报错。
2.文件工作区修改了之后,并提交到了暂存区(即已经add),但未commit
此时文件在暂存区但未commit到本地仓库中,使用如下命令来放弃该文件的暂存:
git reset HEAD 文件名
3.文件工作区修改了之后,并提交到了暂存区(即已经add),同时已经commit
使用如下命令将已经commit的文件回到暂存区状态(即commit前):
git reset --soft HEAD^
HEAD为默认参数可以省略。
使用如下命令将已经commit的文件回到工作区状态(即add前):
git reset
此时的情况就和第一种情况相同了,所以需要使用git checkout 文件名 命令来将文件回退到上次的版本。
如果你只想取消指定文件的commit则只需使用git reset HEAD 文件名 命令即可。
回退完成后可以通过git status命令再次检查,待检查无误后通过git pull命令进行同步。
待本地同步完成后就可以进行代码的提交了:
首先我们通过以下命令将需要提交的文件或目录放入暂存区(注意在add前最好git pull同步一下,以保证本地代码为最新版本)
git add 文件名/目录名 文件名/目录名 文件名/目录名 。。。
可以同时add多个文件或目录,多个文件或目录间通过空格隔开。
如果要提交暂存区内的所有文件或目录则使用git add *命令。
再次运行git status命令就可以看到工作区中发生的变化了。
提交到工作区后通过以下命令将代码提交到本地仓库(在commit前最好先git log一下查看当前所在分支状态)
git commit
运行该命令后会出现一个commit模板编辑区域,需要在其中输入提交的信息(该信息会在代码管理平台,如gerrit中显示出来。所以一般是代码的改动介绍信息)
信息输入完毕后,可按照编辑区域底部的提示信息退出编辑。
commit完成后可以通过git log命令查看刚刚commit的信息。
然后通过
git remote -v
查看当前项目所属的代码托管平台和该项目在平台上的ssh地址。
然后使用
git push 平台名称 提交地址
将代码提交到远程仓库
提交地址的格式为:
HEAD:refs/for/所在分支名称
至此整个代码的提交完成。
更新已提交的代码(前提是代码未入库,也就是未merged)
此部分的前提是你已经提交了一笔代码,并且想更新对应代码。用git log命令查看最新的一笔提交是不是你要更新的那一笔,如果不是则用git commit提交一笔新的
比如本地开发代码已提交,提交后发现这次提交的代码有问题或者漏提交了一些文件,又或是只想修改之前的commit注释。
在更新代码前注意当前所在分支是否和要更新的代码处在同一条分支上,如果不处在对应分支则需要使用git checkout 分支名 切换到对应分支。
代码的add流程和push流程与之前无异(见上面,注意在add前最好git pull同步一下,以保证本地代码为最新版本)。
关键区别在commit环节,命令不再使用git commit命令,而是使用如下命令:
git commit --amend
在该命令执行完后同样会出现一个commit模板编辑区域,需要在其中修改之前输入提交的信息,你也可以选择不修改。
在编辑完提交信息后就可以正常push了。
如果代码已经入库,那么再想更新之前的代码就只能重新使用git commit提交一笔新的代码。
此时不能再使用git commit --amend命令修改因为代码已经入库了,这笔代码的commit记录已经消失了
同步代码
首先进入需要同步代码目录中(有.git目录)
通过以下命令查看本地仓库和远程仓库的所有分支以及当前所在分支
git branch -av
选择需要上述命令中列出的需要跟踪的远程分支,然后通过以下命令创建本地跟踪分支并切换到该分支
git checkout -b 本地跟踪分支名 远程分支地址
其中本地跟踪分支名是一个自定义的名称,一般与被跟踪的远程分支名一致
创建完成后会自动切换到该本地跟踪分支上,此时通过git pull命令就可以实现代码同步了
更新整仓代码(repo+git)
首先需要拉取完成整仓代码,一般使用repo init和repo sync命令
拉取完成后在后续阶段可能需要更新整仓代码,这时只需再执行一遍拉取代码时的repo sync命令即可完成更新
但是本地代码和远程代码有冲突的部分是无法完成更新的。这时分两种情况处理:
1、冲突代码并非你本人更新的
首先切换到产生冲突的目录中,然后通过git checkout .命令来检出冲突目录下的所有文件
2、冲突代码为你本人更新的
首先切换到产生冲突的目录中,然后使用如下命令将工作区的改动备份到git栈中:
git stash
执行完成后工作区内容会恢复到仓库head最后一次提交的内容
然后使用git pull命令更新代码
更新完成后使用如下命令将之前备份的工作区改动合并到更新后的代码中:
git stash pop
这个过程是自动合并的。如果成功,则自动此备份会从git栈中删除。
如果有冲突,则你需要手动解决冲突。然后用git stash drop命令手动将该备份从git栈中删除
上述步骤完成后需要重复执行repo sync命令来进行更新