Git是当下最为流行的分布式版本控制系统。版本控制系统要做什么事情呢,其实就是记录文件的变更记录。就像数据库一样,Git支持文件级别的增删改查等信息变更的记录,同时这些记录操作是在本地就可以完成。因此将从这四个方面简单记录一下合入代码过程中常见的git命令。
1, git clone xxx.git
,将远程代码库(相当于文件数据库)下载到本地。
2,文件变更查看操作:
git branch
查看本地版本库的分支,git branch -a
列出本地所有分支。
git status
查看本地工作区改动了哪些文件,通常是提交前都会查看的命令。
git diff xxx.c
通过git status
得知本地哪些文件改动之后,使用该命令查看某个具体文件哪些地方做了修改,对比的是工作区和本地版本库分支的差异。
git log
查看本地版本库分支的提交历史git log -3
本地版本库分支最近三次的的提交历史。git log -p xxx.c
查看本地版本库分支中某个文件的历史修改情况。
上述几个命令,基本能够覆盖针对本地工作区以及本地版本库分支修改的查看。
3,文新增修改操作:
首先本地工作区新增文件或者修改某个文件xxx.c
git add xxx.c
将具体修改过的文件变动信息从本地工作区添加至暂存区,通常这一步会add多个文件至暂存区。
git commit -m "for xxx change"
,该命令是将上一步添加至暂存区的多个文件信息一次性的从暂存区提交至本地版本库的当前分支,如果后续还需要commit,形式为git commit --amend
, 即不需要再添加message说明。
4,文件删除操作:
首先本地工作区将无用的文件删除
git rm xxx.c
将文件 删除的信息提交至暂存区。
git commit -m "for xx change"
从暂存区提交至本地版本库分支。
5,上述操作完成了文件修改提交至本地版本库分支,如果想提交到远程分支,需要如下操作:
git pull -r
一般提交前需要把本地的分支和远程进行对齐,因此需要拉取远程分支,编译验证新增代码是否可用。通常由于本地工作区由于编译会产生很多的临时文件,这些文件由于没有commit会导致git pull
失败,可以使用git stash
将工作区的内容保存到git栈中,使用git pull -r
更新本地分支后,在使用git stash pop
将git栈中的内容出栈。如果这时候出现文件冲突,会提示哪些文件存在冲突,解决冲突之后,将修改之后的文件git add到暂存区,然后git rebase --continue继续合并即可。
git push origin
将本地分支经过验证的分支代码同步到origin主机的分支
6,撤销某些修改
git checkout -xxx.c
丢弃本地工作区的修改,如果文件已将提交到暂存区,则本地工作区和暂存区保持一致如果没有, 则本地工作区和本地分支保持一致。
git reset HEAD xxx.c
放弃某个文件的暂存区的修改,本地修改不会丢弃
git checkout comit_id path 放弃某个文件的修改,包含暂存区和已经提交的commit记录,将该文件对齐到某一个commit_id 的提交,该命令用于一个文件已经被提交commit了,但是想恢复该文件不修改了通常返回上一个commit_id。
使用如下三个命令对于commit的提交进行回退:
git reset --hard HEAD^
回退一个版本,本地的文件也将被恢复的版本替换,这个时候暂存区没有内容。
git reset --soft HEAD^
回退一个版本将已提交的内容恢复到暂存区不影响原来本地的文件(未提交的也不受影响)这个时候可以对暂存区的内容再次进行commit
git reset --mixed HEAD^
回退一个版本,暂存区的内容和本地已提交的内容全部恢复到未暂存的状态,不影响原来本地文件(未提交的也不受影响)。
可以看到hard,soft,mixed三个参数分别控制的是暂存区以及本地的修改情况,暂存区和本地commit的状态组合有四种,由于本地不存在,暂存区不存在的情况不需要考虑,其他三种情况则对应上述三个参数。
7,恢复某次commit记录:
如果由于某种操作使得本地的commit记录消失了,即使用git log查看不到本地的commit记录,恢复该commit记录的方法如下:
git reflog
(该命令记录了每以 个git命令对应的commit id)找到对应的commit id,使用git reset --hard commit id
恢复到该次commit即可,关于hard参数会丢弃本地和暂存区的修改,需要注意一下。
8,处理多个commit提交:
有的时候需要提交多个特性的代码,会使用到多个commit,如何在修改了代码后,将修改的代码提交到指定的commit中呢。例如按照时间顺序依次有commit1,commit2,commit3 3个提交记录,要把本地修改的代码提交到commit2中,如下:
(1),执行git rebase --interactive HEAD^
也可以使用git rebase --interactive commit2
,编辑界面会列出目前所有commit提交记录,将要修改的那个commit的pick改为edit,保存退出。当然如果需要合并两个commit记录,只需要将pick改为其他参数即可。
(2),使用git log
查看可以发现本地的commit中当前只存在需要提交的那个commit了。
(3),执行git commit --amend
就可以将修改提交到该 commit了。
(4),执行git rebase --continue
后再查看git log可以看到所有的commit记录已经恢复。
(5),执行git push origin HEAD^xxx
或者git push origin commit2:xxx
命令将commit2提交到远程服务器。
9,如何将代码合并到其他的分支
有的时候在分支A合入了commit1的代码,这个时候要把commit1的记录合入到分支B中,操作如下:
1,git log
查看commit1 的commit_id。
2,git checkout B
切换到分支B。
3,在B分支上执行git cherry-pick commit_id
,该commit_id即步骤一中的commit id。
4,成功的话会有成功的提示。如果冲突的话,需要先解决冲突。手动解决玩冲突之后,git add xxx.c
,然后git cherry-pick --continue
即可。
以上就是项目中最常见的几个git命令。
本文为CSDN村中少年原创文章,转载记得加上小尾巴偶,博主链接这里。