附录B: Git常用命令
Git版本:2.10.2
配置
Git的配置,分为三个级别:
config --system: 修改/etc/gitconfig文件,是全局配置,只需要系统admin做一次即可。
config --global:修改/home/[username]/.gitconfig文件,配置只对每一个ssh的用户可见。
config -e:修改工作区的.git/config文件,配置只对当前repository有效。
覆盖顺序为:3 > 2 >1。
修改提交者的信息
git config --global user.name [username] git config --global user.email [email]修改git的message编辑器为vim
git config --global core.editor vim在git命令中开启颜色显示
git config --global color.ui true区分文件名大小写
编辑每一个git项目下的.git/config文件,设置core.ignorecase为false
或者
git mv oldFileName newFileName兼容不同平台的换行符
Windows:
git config --global core.autocrlf trueMac:
git config --global core.autocrlf input可以关闭关于换行符的提示:
git config --global core.safecrlf false如果使用HTTP clone遇到提交大小限制,请使用以下命令提高限值
git config --global http.postBuffer 524288000(bytes)此外,也可以使用以下命令进入编辑页面做相应修改
配置Git常用命令的alias
这里--system参数将修改/etc/gitconfig文件,是全局配置,只需要admin做一次即可。
进入工作根目录,运行git config -e,会修改工作区的.git/config文件。
这里需要注意:git config文件的override顺序是3>1>2.
显示配置列表
配置密钥
使用http/https协议访问Git仓库时缓存密码
取得项目的Git仓库
有两种取得Git项目仓库的方法。第一种是在现存的目录下,通过导入所有文件来创建新的Git仓库。第二种是从已有的Git仓库克隆出一个新的镜像仓库来。
在工作目录中初始化新仓库
要对现有的某个项目开始用Git管理,只需到此项目所在的目录,执行:
从现有仓库克隆
这会在当前目录下创建一个名为“test”的目录,其中包含一个.git的目录,用于保存下载下来的所有版本记录,然后从中取出最新版本的文件拷贝。
记录每次更新到仓库
检查当前文件状态
跟踪新文件、暂存已修改文件
使用命令
git add [dirName] [fileName1] [fileName2]开始跟踪一个新文件/文件夹(包括子文件夹)。实际上只是add file into staged area,并没有提交文件。忽略未纳入版本管理的某些文件/文件夹
一般我们总会有些文件无需纳入Git的管理,也不希望它们出现在未跟踪文件列表。通常都是些自动生成的文件,比如日志文件、编译过程中创建的临时文件等。可以创建一个名为.gitignore的文件,列出要忽略的文件模式(每一个目录下都可以单独设置.gitignore)。
文件.gitignore的格式规范如下:
所有空行或者以注释符号 # 开头的行都会被 Git 忽略。
可以使用标准的 glob 模式匹配。匹配模式最后跟反斜杠(/)说明要忽略的是目录;要忽略指定模式以外的文件或目录,可以在模式前加上惊叹号(!)取反。
所谓的 glob 模式是指 shell 所使用的简化了的正则表达式。星号(*)匹配零个或多个任意字符;[abc] 匹配任何一个列在方括号中的字符(这个例子要么匹配一个 a,要么匹配一个 b,要么匹配一个 c);问号(?)只匹配一个任意字符;如果在方括号中使用短划线分隔两个字符,表示所有在这两个字符范围内的都可以匹配(比如 [0-9] 表示匹配所有 0 到 9 的数字)。
此外,忽略未纳入版本管理的文件或文件夹的方式还有:
可以为自己配置一个全局的ignore文件,位于任何版本库之外:
git config --global core.excludesfile ~/.gitignoreglobal.git/info/exclude文件里设置你自己本地需要排除的文件,不会影响到其他人,也不会提交到版本库中去
忽略已经在版本库里的文件/文件夹
告诉Git忽略对已经纳入版本管理的文件a的修改,Git会一直忽略此文件直到重新告诉Git可以再次跟踪此文件:
告诉Git恢复跟踪a
查看当前被忽略的已经纳入版本库管理的文件
查看已暂存和未暂存的更新、提交之间的差异
git status的显示比较简单,仅仅是列出了修改过的文件,如果要查看具体修改了什么地方,可以用git diff命令。提交更新
每次准备提交前,先用
git status看下,是不是都已暂存起来了,然后再运行提交命令git commit提交更新。跳过使用暂存区域
移除文件
要从 Git 中移除某个文件(包括暂存区域和工作目录),就必须要从已跟踪文件清单中移除(确切地说,是从暂存区域移除),然后提交。
可以用
git rm命令完成此项工作,并连带从工作目录中删除指定的文件,这样以后就不会出现在未跟踪文件清单中:git rm [file1] [file2]。如果删除之前修改过并且已经放到暂存区域的话,则必须要用强制删除选项 -f,以防误删除文件后丢失修改的内容。
另外一种情况是,我们想把文件从 Git 仓库中删除(亦即从暂存区域移除),但仍然希望保留在当前工作目录中。换句话说,仅仅从跟踪清单中删除。比如一些编译文件不小心纳入仓库后,要移除跟踪但不删除文件,以便稍后在 .gitignore 文件中补上,用 --cached 选项即可:
git rm --cached [file]。后面可以列出文件或者目录的名字,也可以使用 glob 模式,例如:git rm log/\*.log。移动文件
要在Git中对文件改名,可以运行如下命令:
运行 git mv 就相当于运行了下面三条命令:
回滚文件
远程仓库
远程仓库是指托管在网络上的项目仓库。
查看当前的远程库
要查看当前配置有哪些远程仓库,可以用
git remote命令,它会列出每个远程库的简短名字。在克隆完某个项目后,至少可以看到一个名为 origin 的远程库,也可以使用git remote -v显示对应的克隆地址。添加远程仓库
要添加一个新的远程仓库,可以指定一个简单的名字,以便将来引用。
这里的url也可以是一个本地git项目文件夹。如
git remote add local_repository ./test_repository。从远程同步信息
推送数据到远程仓库
项目进行到一个阶段,可以将本地仓库中的数据推送到远程仓库。命令如下:
把本地的 master 分支推送到 origin 服务器上(克隆操作会自动使用默认的 master 和 origin,并关联),可以运行下面的命令:
只有在所克隆的服务器上有写权限,或者同一时刻没有其他人在push数据,这条命令才会执行成功。如果在push数据前,已经有其他人推送了若干更新,那推送操作就会被驳回。必须先把他们的更新merge到本地才能继续。
此外,当本地的版本落后于远程仓库,但是想要用旧版本覆盖远程版本的话,命令如下:
推送所有分支到远程仓库:
查看远程仓库信息
我们可以通过命令
git remote show [remote-name]查看某个远程仓库的详细信息。远程仓库的删除和重命名
用
git remote rename命令修改某个远程仓库在本地的简短名称。使用git remote rm命令删除远程仓库。检出远程仓库的某一分支
分支的使用
分支是在开发中经常使用的一个功能。
标签的使用
当完成一个版本的开发,需要做发布的时候,需要给此版本打一个标签。
日志
有时候需要查看版本的日志记录,以确定、跟踪代码的变化等
下面是git log的高级用法:
撤销
在提交了错误的修改或者想撤销文件的变动时,需要以下命令:
选择某些commit操作
git cherry-pick可以选择某一个分支中的一个或几个commit来进行操作。例如,假设我们有个稳定版本的分支,叫master,另外还有个开发版本的分支dev,我们不能直接把两个分支合并,这样会导致稳定版本混乱,但是又想增加一个dev中的功能到master中,这里就可以使用cherry-pick。
解决冲突
在rebase或者merge时,有时候会产生conflicts,如果无法auto merge,那么一般有两种处理方式:
手动修改冲突的文件:修改完成后,使用git add、git commit或者git rebase --continue等后续操作即可。
使用任一方的文件最为最新文件
Submodule
当你的工程的部分文件是另一个Git库时,可以使用submodule(现在subtree已经替代了submodule)。
添加
为当前工程添加submodule,命令如下:
删除
首先,要在“.gitmodules”文件中删除相应配置信息。然后,执行“git rm –cached ”命令将子模块所在的文件从git中删除。
下载的工程带有submodule
当使用git clone下来的工程中带有submodule时,初始的时候,submodule的内容并不会自动下载下来的,此时,需要执行如下命令:
Subtree
第一次添加子目录,建立与Git项目的关联
从远程仓库更新子目录
从子目录push到远程仓库(确认你有写权限)
其他
Last updated