Git使用总结
ssh-keygen -t rsa -b 4096 -C "xxx@exmaple.com"
生成ssh密钥对,然后将~/.ssh/id_rsa/id_rsa.pub复制到github的ssh key管理的地方即可。
git add
1、将文件添加到暂存区,文件会由untracked变为tracked状态 。
2、如果之前某个文件已经git add了,但是没有进行commit操作,那么修改文件后,执行git add会将上次git add的文件覆盖。
git commit -m 描述
提交暂存区的文件到版本库中,并增加描述
git commit -a -m 描述
1、只要git add一次之后,只要之后每次文件一改动,不用git add ,直接git commit -a 就会将这些新改动的文件全部commit,自带add。
2、从来没有经过git add的文件,不会被添加到版本库
git rm filename
同时删除版本库(注意不是暂存区)和工作目录的文件,但是不会删除历史记录,可以回到删除文件之前。
对没有提交到版本库中的文件(没有commit过),使用此命令是无效的。
如果不使用此命令,那么就要使用 如下命令完成同样的功能
rm file && git add file && git commit file
然后才将文件从两个地方删除
git rm --cached file
1、将一个已暂存的文件转化为未暂存的,tracked=>untracked
2、将一个已经提交到版本库的文件从版本库中删除,但是将其保留在工作目录
等价于 git reset HEAD file && git checkout -- file
git checkout head -- file
如果执行了git rm命令,将版本库和工作目录的文件删除了,可以使用该命令将文件恢复
恢复之后该文件的状态是已添加进版本库
git mv fileName newName
同时移动两个地方的文件(版本库和工作目录)
等同于 mv fileName newName && git rm fileName && git add newName
移动之后,要使用commit提交修改
git log -n -p commit_id或者引用
输出commit_id或者引用 所指的 那次提交的 n条log
git log master~A..master~B
输出master分支,倒数第A次,到倒数第B次提交之间的提交日志,".."表示区间范围
git branch
查看当前版本库中的所有分支
git branch newBranchName [start_commit]
省略start_commit时,默认以当前的分支的最新commit为基准,创建一个新分支。
git checkout branchName
从当前分支切换到其他已创建的分支(branchName所指的分支)
git checkout -b newBranch
以当前的分支的最新commit为基准,创建一个新分支,并且切换到新的分支。
如果当前分支有文件修改后(一个被commit过的文件,现在又做了一些修改,但是没有commit提交这点修改),执行这条命令之后,所做的修改会直接成为新分支的中modified文件,在新分支中add之后commit,然后就成功新分支的一部分,并且在原分支中所做的修改会被抛弃。
git checkout -m otherBranch
如果想要将在本分支中所做的改动不提交到本分支,而是提交到另外一个分支,并且切换到另一个分支。
使用这个命令之后,在原分支中的所做的改变都会变成另一条分支的内容,所以原分支中所做的改动将会被丢弃。
使用git checkout时,要注意
1、如果当前分支的工作目录中某个文件从来没有commit过,哪怕是add了,那么切换到其他分支的时候,该文件仍旧保持原状态。如果是add过,那么现在commit,那么这个文件就会成为新分支的一部分,而原分支就不会出现该文件了。
2、如果当前分支的工作目录中的某个文件被commit过,但是现在对其做了一点修改,导致其状态变为modified,如果不先commit,一旦发起checkout到其他分支,就会abort,如果加-f选项强制切换分支,那么该文件在原分支中的所做的改变就会被丢弃。所以在切换到其他分支前,尽量进行commit,将在本分支中做的改动提交到分支中。
3、如果有其他情况,可以参考上一条命令,git checkout -m otherBranch
git show dev:index.php
显示分支名称为dev下的index
git branch -d dev
删除分支名称为dev的分支。
注意
1、删除的分支不能使当前分支,只能是除当前分支以外的分支。
2、删除的分支如果没有合入当前分支,也就是说要删除的分支最新的提交之后,没有合入到本分支,那么执行这条命令会失败的
3、如果要强制删除一条没有何如本分支的分支,可以将-d选项改为-D即可。
git diff
比较文件或者目录的差异,包括以下两点
1、一个文件commit了之后,做了一些修改,没有add,也没有commit,那么执行此命令就会显示 当前工作目录中的文件和版本库中的文件差异。
2、一个文件commit了之后,做了一些修改,执行了add,但没有commit,然后又对该文件做了一些修改,此时执行命令,显示的就是当前工作目录中的文件和暂存区中该文件的差异。
git diff commit_id
显示当前工作目录 和 指定commit_id的那次提交之间的差异
注意:是当前工作目录和给定提交之间的差异,并不是暂存区或者版本库 和 给定提交之间的差异。
git diff --cached commit_id
显示暂存区中某个文件 指定提交的差异,commit_id可以省略,省略的话,默认为HEAD,也就是当前分支的最新提交。
git diff commit_id_1 commit_id_2
显示两次提交之间的差异,会忽略当前工作目录中和暂存区中文件的差异。
git diff HEAD
显示当前工作目录 和 暂存区中的文件差异。
git merge dev
将分支名称为dev
git clone git_url [repos_Name]
克隆一个远程的版本库,git库的地址是git_url,后面的repos_name是版本库下载完之后的文件夹名称。
repos_name可以省略,省略之后,默认是以版本库的名称命名文件夹。
git clone --bare git_url [repos_name.git]
创建权威版本库,权威版本库的名称是repos_name.git,可省略。
权威版本库和普通版本库的区别:
1、权威版本库没有工作目录,只包含普通版本库中的.git文件夹里面的内容。
2、普通版本库中有工作目录,不仅包含.git目录,还包含工作目录中的文件。
git config user.name 'test'
设置当前版本库的配置信息,该配置信息会保存在.git/config文件中,可以通过 cat .git/config 来查看。
git config --list 或者 -l
显示当前版本库的配置信息(注意包含全局配置和当前版本库配置)。
git config --global user.name 'test'
git config --global user.email 'test@demo.com'
设置git全局配置
git config --global --list
查看git的全局配置项。
这些配置项是使用 git config --global 来设置的配置项。
git pull xxx dev
从xxx版本库中的dev分支的内容拉取下来,用来更新当前的本地分支
git push xxx dev
将版本库中的当前分支的内容提交到xxx版本库的dev分支。
git remote add xxx url
git pull 和 git push后面的xxx可以使用下面这条命令添加
其实xxx就是url的别名而已
以上内容整理自《Git 版本控制管理》