天天看点

Git常用命令汇总一、初始化设置二、把文件添加到版本库三、版本切换、管理修改、删除文件四、远程仓库五、分支管理六、标签管理七、自定义Git

本文参考自:  廖雪峰老师的Git教程,仅为了方便本人使用Git时查找命令用,不保证命令的准确性,如使用本文命令给您造成损失,本人概不负责!

目录

一、初始化设置

二、把文件添加到版本库

三、版本切换、管理修改、删除文件

四、远程仓库

五、分支管理

六、标签管理

七、自定义Git

一、初始化设置

姓名与Email

git config --global user.name "Your Name"

git config --global user.email "[email protected]"

注意:

git config命令的--global参数,用了这个参数,表示你这台机器上所有的Git仓库都会使用这个配置

当然也可以对某个仓库指定不同的用户名和Email地址

创建目录

mkdir learngit

cd learngit

pwd     # 显示当前目录

git init  # 把当前路径下的目录变成Git可以管理的仓库

ls -ah     # 查看所有文件

二、把文件添加到版本库

写一个文件readme.txt

一定要放到learngit目录下(子目录也行)

第一步,用命令git add告诉Git,把文件添加到仓库:

git add readme.txt

第二步,用命令git commit告诉Git,把文件提交到仓库:

git commit -m "wrote a readme file"

为什么Git添加文件需要add,commit一共两步呢?因为commit可以一次提交很多文件,所以你可以多次add不同的文件,比如:

git add file1.txt

git add file2.txt file3.txt

git commit -m "add 3 files."

三、版本切换、管理修改、删除文件

***要随时掌握工作区的状态,使用

git status

如果git status告诉你有文件被修改过,用git diff可以查看修改内容:

git diff

git diff 比较的是工作区文件与暂存区文件的区别(上次git add 的内容)

git diff --cached 比较的是暂存区的文件与仓库分支里(上次git commit 后的内容)的区别

***版本回退

穿梭前,用git log可以查看提交历史,以便确定要回退到哪个版本。

git log

git log --pretty=oneline  # 简版查看

在Git中,用HEAD表示当前版本,上一个版本就是HEAD^,上上一个版本就是HEAD^^,当然往上100个版本写100个^比较容易数不过来,所以写成HEAD~100

HEAD指向的版本就是当前版本,因此,Git允许我们在版本的历史之间穿梭,使用命令:

git reset --hard commit_id

要重返未来,用git reflog查看命令历史,以便确定要回到未来的哪个版本。

git reflog

场景1:当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令

git checkout -- readme.txt

场景2:当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步,第一步用命令

git reset HEAD readme.txt

就回到了场景1,第二步按场景1操作。

场景3:已经提交了不合适的修改到版本库时,想要撤销本次提交,参考版本回退一节,不过前提是没有推送到远程库。

命令git rm用于删除一个文件。如果一个文件已经被提交到版本库,那么你永远不用担心误删,但是要小心,你只能恢复文件到最新版本,你会丢失最近一次提交后你修改的内容。

git rm test.txt

git commit -m "remove test.txt"

四、远程仓库

本地Git仓库和GitHub仓库之间的传输是通过SSH加密的,所以,需要一点设置:

第1步:创建SSH Key。在用户主目录下,看看有没有.ssh目录,如果有,再看看这个目录下有没有id_rsa和id_rsa.pub这两个文件,如果已经有了,可直接跳到下一步。如果没有,打开Shell(Windows下打开Git Bash),创建SSH Key:

ssh-keygen -t rsa -C "[email protected]"

你需要把邮件地址换成你自己的邮件地址,然后一路回车,使用默认值即可,由于这个Key也不是用于军事目的,所以也无需设置密码。

如果一切顺利的话,可以在用户主目录里找到.ssh目录,里面有id_rsa和id_rsa.pub两个文件,这两个就是SSH Key的秘钥对,id_rsa是私钥,不能泄露出去,id_rsa.pub是公钥,可以放心地告诉任何人。

第2步:登陆GitHub,打开“Account settings”,“SSH Keys”页面:

然后,点“Add SSH Key”,填上任意Title,在Key文本框里粘贴id_rsa.pub文件的内容:

要关联一个远程库,使用命令git remote add origin [email protected]:path/repo-name.git:

git remote add origin https://github.com/github账号/learngit.git

关联后,使用命令git push -u origin master第一次推送master分支的所有内容;

此后,每次本地提交后,只要有必要,就可以使用命令:

git push origin master         推送最新修改;

这儿出现错误:

fatal: unable to access 'https://**': 

SSL certificate problem: unable to get local issuer certificate

解决办法:

git config --global http.sslVerify false

git push -u origin master

弹出登录框登录github账号即可

要克隆一个仓库,首先必须知道仓库的地址,然后使用git clone命令克隆:

git clone [email protected]:wochonglai/learngit.git

Git支持多种协议,包括https,但通过ssh支持的原生git协议速度最快。

五、分支管理

Git鼓励大量使用分支:

查看分支:git branch

创建分支:git branch second

切换分支:git checkout second

创建+切换分支:git checkout -b second

切换到主干:

git checkout master

合并某分支到当前分支:git merge second

删除分支:git branch -d second

当Git无法自动合并分支时,就必须首先解决冲突。解决冲突后,再提交,合并完成。

解决冲突就是把Git合并失败的文件手动编辑为我们希望的内容,再提交。

用git log --graph命令可以看到分支合并图。

合并分支时,加上--no-ff参数就可以用普通模式合并,合并后的历史有分支,能看出来曾经做过合并,而fast forward合并就看不出来曾经做过合并。

git merge --no-ff -m "merge with no-ff" dev

bug修复:

修复bug时,我们会通过创建新的bug分支进行修复,然后合并,最后删除;

当手头工作没有完成时,先把工作现场git stash一下,然后去修复bug,修复后,再git stash pop,回到工作现场:

git stash pop

查看stash内容:

git stash list

也可用:git stash apply恢复,但是恢复后,stash内容并不删除,你需要用git stash drop来删除

恢复指定的stash,用命令:

git stash apply [email protected]{0}

开发一个新feature,最好新建一个分支;

如果要丢弃一个没有被合并过的分支,可以通过git branch -D <name>强行删除。

git branch -D feature

查看远程库信息,使用:

git remote   或者  git remote -v

从本地推送分支,使用git push origin branch-name,如果推送失败,先用git pull抓取远程的新提交;

在本地创建和远程分支对应的分支,使用git checkout -b branch-name origin/branch-name,本地和远程分支的名称最好一致;

建立本地分支和远程分支的关联,使用git branch --set-upstream branch-name origin/branch-name;

从远程抓取分支,使用git pull,如果有冲突,要先处理冲突。

多人协作的工作模式通常是这样:

首先,可以试图用git push origin <branch-name>推送自己的修改;

如果推送失败,则因为远程分支比你的本地更新,需要先用git pull试图合并;

如果合并有冲突,则解决冲突,并在本地提交;

没有冲突或者解决掉冲突后,再用git push origin <branch-name>推送就能成功!

如果git pull提示no tracking information,则说明本地分支和远程分支的链接关系没有创建,用命令:

git branch --set-upstream-to <branch-name> origin/<branch-name>。

rebase操作可以把本地未push的分叉提交历史整理成直线:

git rebase

rebase的目的是使得我们在查看历史提交的变化时更容易,因为分叉的提交需要三方对比。

六、标签管理

新建一个标签,默认为HEAD,也可以指定一个commit id:

git tag <tagname>   或者    git tag v1.5 p2e52

指定标签信息:

git tag -a <tagname> -m "message..."

查看所有标签:

git tag

查看标签信息

git show <tagname>

推送一个本地标签:

git push origin <tagname>

推送全部未推送过的本地标签:

git push origin --tags

删除一个本地标签:

git tag -d <tagname>

删除一个远程标签:

git push origin :refs/tags/<tagname>

七、自定义Git

****忽略特殊文件

忽略某些文件时,需要编写.gitignore;

.gitignore文件本身要放到版本库里,并且可以对.gitignore做版本管理!

配置别名:

每个仓库的Git配置文件都放在.git/config文件中,而当前用户的Git配置文件放在用户主目录下的一个隐藏文件.gitconfig中

git config --global alias.别名 别名指向的命令

如:

git config --global alias.co checkout

git config --global alias.ci commit

另外:

git config --global alias.unstage 'reset HEAD'

git config --global alias.last 'log -1'

****搭建Git服务器

参考:https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/00137583770360579bc4b458f044ce7afed3df579123eca000

颜色主题设置

color:

RGB:229,225,204

让命令输出看起来更醒目:

git config --global color.ui true