Yaitza

git使用细则

    git使用细则。

1. git环境配置

    一般在新的系统上,我们都需要先配置下自己的 Git 工作环境。配置工作只需一次,以后升级时还会沿用现在的配置。当然,如果需要,你随时可以用相同的命令修改已有的配置。

    Git 提供了一个叫做 git config 的工具,专门用来配置或读取相应的工作环境变量。而正是由这些环境变量,决定了 Git 在各个环节的具体工作方式和行为。这些变量可以存放在以下三个不同的地方:

  • /etc/gitconfig文件:系统中对所有用户都普遍适用的配置。若使用 git config 时用 –system 选项,读写的就是这个文件。

  • ~/.gitconfig文件:用户目录下的配置文件只适用于该用户。若使用 git config 时用 –global 选项,读写的就是这个文件。

  • 当前项目的 git 目录中的配置文件(也就是工作目录中的 .git/config 文件):这里的配置仅仅针对当前项目有效。每一个级别的配置都会覆盖上层的相同配置,所以 .git/config 里的配置会覆盖/etc/gitconfig 中的同名变量。

    第一个要配置的是你个人的用户名称和电子邮件地址。这两条配置很重要,每次 Git 提交时都会引用这两条信息,说明是谁提交了更新,所以会随更新内容一起被永久纳入历史记录:

$ git config --global user.name "John Doe" $ git config --global user.email johndoe@example.com  

    如果用了 –global 选项,那么更改的配置文件就是位于你用户主目录下的那个,以后你所有的项目都会默认使用这里配置的用户信息。如果要在某个特定的项目中使用其他名字或者电邮,只要去掉 –global 选项重新配置即可,新的设定保存在当前项目的 .git/config 文件里。

    接下来要设置的是默认使用的文本编辑器。Git 需要你输入一些额外消息的时候,会自动调用一个外部文本编辑器给你用。默认会使用操作系统指定的默认编辑器,一般可能会是 Vi 或者 Vim。如果你有其他偏好,比如 Emacs 的话,可以重新设置:

$ git config --global core.editor emacs

    还有一个比较常用的是,在解决合并冲突时使用哪种差异分析工具。比如要改用 vimdiff 的话:

$ git config --global merge.tool vimdiff  

    Git可以理解 kdiff3,tkdiff,meld,xxdiff,emerge,vimdiff,gvimdiff,ecmerge,和 opendiff 等合并工具的输出信息。当然,你也可以指定使用自己开发的工具。

    查看配置信息,要检查已有的配置信息,可以使用 git config –list 命令:

$ git config --list user.name=Scott Chacon 
user.email=schacon@gmail.com  

    也可以直接查阅某个环境变量的设定,只要把特定的名字跟在后面即可,例如:

git config user.name 
Scott Chacon

2. git常用命令

命令 备注
git init 从当前目录初始化,要对现有的某个项目开始用 Git 管理,只需到此项目所在的目录,执行:git init;初始化后,在当前目录下会出现一个名为 .git 的目录,所有 Git 需要的数据和资源都存放在这个目录中。
git clone git@github.com:yaitza/python-guide.git 从现有仓库克隆。
git add [file] 跟踪新文件和暂存已修改文件。
git commit 提交更新,这种方式会启动文本编辑器以便输入本次提交的说明。
git commit -m “Initial commit of test repo” 使用 -m 参数后跟提交说明的方式,在一行命令中提交更新。
git diff 查看已暂存和未暂存的修改,git diff 此命令比较的是工作目录中当前文件和暂存区域快照之间的差异,也就是修改之后还没有暂存起来的变化内容。
git diff –cached 看已经暂存起来的文件和上次提交时的快照之间的差异。
git rm [file] 移除文件,要从 Git 中移除某个文件,就必须要从已跟踪文件清单中移除(确切地说,是从暂存区域移除),然后提交。
git rm –cached [file] 把文件从 Git 仓库中删除(亦即从暂存区域移除),但仍然希望保留在当前工作目录中。 可以用–cached选项。
git mv [file] [newfile] 移动文件。
git status 检查当前文件状态。
git log 查看提交历史。
git commit –amend 修改最后一次提交,有时候我们提交完了才发现漏掉了几个文件没有加,或者提交信息写错了。想要撤消刚才的提交操作,可以使用 –amend 选项重新提交:git commit –amend如果刚才提交完没有作任何改动,直接运行此命令的话,相当于有机会重新编辑提交说明,而所提交的文件快照和之前的一样。如果刚才提交时忘了暂存某些修改,可以先补上暂存操作,然后再运行 –amend 提交。
git reset HEAD [file] 取消已经暂存的文件。
git checkout [file] 取消对文件的修改。
git checkout – [file] 一般与上面的命令效果相同,但如果有一个分支名与文件名相同,就不一样了;加–来消除歧义。
git stash 把所有没有提交的修改暂存到stash里面。可用git stash pop恢复。
git clean -df 返回到某个节点,-n 显示将要删除的文件和目录,-f 删除文件,-df 删除文件和目录。
git remote 查看当前的远程库。
git remote -v 也可以加上 -v 选项,显示对应的克隆地址。
git remote add [shortname] [url] 添加远程仓库。
git fetch [remotename] 从远程仓库抓取数据;此命令会到远程仓库中拉取所有你本地仓库中还没有的数据。运行完成后,你就可以在本地访问该远程仓库中的所有分支,将其中某个分支合并到本地,或者只是取出某个分支,一探究竟。
git push [remotename] [localbranch]:[remotebranch] 推送数据到远程仓库。
git remote show [remotename] 查看远程仓库信息。
git remote rename [remotename] [new-remotename] 远程仓库重命名
git remote rm [remotename] 远程仓库删除。
git tag 显示已有的标签。
git tag -a [tagname] –m [comments] 新建标签,如果想为以前的某次提交打标签,只要在打标签的时候跟上对应提交对象的校验和(或前几位字符)即可 。
git checkout –b [branchname] [tagname] 用某个标签新建分支。
git push [remotename] [tagname] 分享标签;默认情况下,git push 并不会把标签传送到远端服务器上,只有通过显式命令才能分享标签到远端仓库。
git push [remotename] –tags 如果要一次推送所有(本地新增的)标签上去,可以使用 –tags 选项。
git branch [branchname] 创建分支。
git checkout [branchname] 切换分支。
git checkout -b [branchname] 新建并切换到该分支。
git branch -d [branchname] 删除分支。
git merge [branchname] 合并分支,以上命令将[branchname]分支合并到当前分支。
git branch 查看分支。
git checkout -b [branchname] [remotename]/[branchname] 远程分支和创建跟踪分支;远程分支(remote branch)是对远程仓库状态的索引。它们是一些无法移动的本地分支;只有在进行 Git 的网络活动时才会更新。远程分支就像是书签,提醒着你上次连接远程仓库时上面各分支的位置。我们用 (远程仓库名)/(分支名) 这样的形式表示远程分支。从远程分支检出的本地分支成为跟踪分支。
git checkout –track [remotename]/[branchname] 同上。
git branch -r -d origin/[branchname] 删除远程分支。
git rebase [branchname] 衍合。
git pull 从远程仓库抓取数据并merge。
git clean -f 删除untracked files。
git clean -fd 连untracked的目录一起删除。
git clean -xfd 连gitignore的untracked文件,目录一起删除(慎用,一般用这个是来删掉编译出来的.o之类的文件)。
git clean -nxfd、-nf、-nfd 在git clean前,加上-n参数会先显示删除哪些文件,防止重要文件被删除。
git blame [file] 显示文件的每一行是在哪个版本修改的。
git whatchanged [file] 显示某个文件的每个版本提交信息:提交日期,提交人员,版本号,提交备注。
git log –pretty=oneline [file] 显示某个文件的每个版本提交信息:版本号,提交备注。
git show [commit_no] 显示某个版本的修改详情。
git log -p [commit_no] 显示某个版本的修改详情。
git cherry-pick [commit_no] 从一个分支合并特定的commits到当前所在分支。
git checkout -b newbranch [commit_no2] 新建分支拉取到当前分支commit_no2节点。
git rebase –ontomaster [commit_no1]^ rebase这个新分支的commit到master(–ontomaster)。[commit_no1]^ 指明你想从哪个特定的commit开始。得到的结果就是feature分支的commit [commit_no1] ~[commit_no2] 都被合并到了master分支。
git log branchA ^branchB 查看branchA有,而branchB中没有的提交记录;分支也可替换为tag。
git log branchA..branchB 查看branchA与branchB之间提交的差异;分支也可替换为tag。
git diff –stat tagA tagB 查看tagA与tagB之间的文件差异。
🐶 您的支持将鼓励我继续创作 🐶