Git使用基础

来源:互联网 发布:武汉国家存储器 知乎 编辑:程序博客网 时间:2024/05/17 13:12

Pro Git:  http://github.danmarner.com/section/toc/

1. 基础

(1). 配置, Git提供了git config的工具:git config [options].
  • /etc/gitconfig 文件:系统中所有用户都适用的配置,--system选项时操作该文件。
  • ~/.gitconfig 文件:只适用于当前用户的配置,--global选项时操作该文件。Windows下使用$HOME\.gitconfig
  • .git/config 文件:当前项目有效的配置。
    git config --global user.name "John Doe"
    git config --global user.email johndoe@example.com
    git config --global merge.tool vimdiff / emerge / kdiff3 / tkdiff
    git config --list
    git config user.name

(2). 文件状态:未跟踪、已修改、已暂存、已提交    
  • 检查当前文件状态:git status,如果不仅仅显示修改过的文件,而是显示具体修改的地方,可以用git diff.
    • git diff 显示修改之后与暂存内容的变化。
    • git diff --cached 显示暂存与提交的变化。
  • 开始跟踪新文件、把已跟踪文件放到暂存区、还能用于合并时把有冲突的文件标记为已解决状态git add
  • 忽略某些文件,编辑.gitignore文件。该文件的格式规范如下:
    • 所有空行或者以注释符号 # 开头的行都会被 Git 忽略。
    • 可以使用标准的 glob 模式匹配。
    • 匹配模式最后跟反斜杠(/)说明要忽略的是目录。
    • 要忽略指定模式以外的文件或目录,可以在模式前加上惊叹号(!)取反。
  • 提交暂存的内容:git commit -m "" 
    • 路过使用暂存区域,自动把所有已经跟踪过的文件暂存起来一并提交:git commit -a -m ""
  • 移除文件和放弃修改:git rm
    • 从暂存区域中移除:git rm --cache
    • 取消已暂存的文件: git reset HEAD <file>
    • 取消对文件的修改: get checkout --<file>
(3). 库管理
  • 查看当前的远程库:git remote -v
    • git remote show [remote-name]  // 查看远程库信息
  • 添加远程仓库:git remote add pb git://githum.com/xxx
    • 获取远程库中的所有分支:git fetch pb   // fetch 命令只是将远端的数据拉到本地仓库,并不自动合并到当前工作分支,只有当你确实准备好了,才能手工合并。
    • 如果是克隆了一个仓库,自动将远程库归于origin名下。// git clone 命令本质上就是自动创建了本地的 master 分支用于跟踪远程仓库中的 master 分支(假设远程仓库确实有 master 分支).
    • git pull 从原始克隆的远端仓库中获取数据后,并自动合并到工作目录中当前分支。
  • 推送数据至远程仓库:git push [remote-name] [branch-name] : [远程分支名]
    • 只有在所克隆的服务器上有写权限,或者同一时刻没有其他人在推数据,这条命令才会如期完成任务。如果在你推数据前,已经有其他人推送了若干更新,那你的推送操作就会被驳回。
  • 删除远程库:git remote rm
  • 列出现有标签:git tag
  • 打标签:git tag -a v1.4 'my version 1.4'    
(4). 分支管理
  • 查看分支:git branch --merge / --no-merged
  • 创建分支:git branch name
  • 切换分支:get checkout name
    • get checkout -b name  remote-name/name  // 基于远程库中的分支,创建新分支并切换到该分支        
  • 合并分支:git merge branch-name
  • 删除分支:git branch -d branch-name
  • 跟踪分支:get checkout --track orgin/branch-name
  • git rebase [主分支] [特性分支] 命令会先检出特性分支然后在主分支上重演
    • 它的原理是回到两个分支的共同祖先,提取你所在分支每次提交时产生的差异(diff),把这些差异分别保存到临时文件里,然后从当前分支转换到你需要衍合入的分支,依序施用每一个差异补丁文件。
        
    假设在接下来的一次软件发布中,你决定把客户端的修改先合并到主线中,而暂缓并入服务端软件的修改(因为还需要进一步测试)。你可以仅提取对客户端的改变(C8 和 C9),然后通过使用 git rebase 的 --onto 选项来把它们在 master 分支上重演。
        git rebase --onto master server client  // 检出 client 分支,找出 client 分支和 server 分支的共同祖先之后的变化,然后把它们在 master 上重演一遍
        
        git rebase master server   // 检出server,然后在master上重演
        

git checkout master   // 快进主分支master
git merge server
如果把衍合当成一种在推送之前清理提交历史的手段,而且仅仅衍合那些永远不会公开的 commit,那就不会有任何问题。如果衍合那些已经公开的 commit,而与此同时其他人已经用这些 commit 进行了后续的开发工作,那你有得麻烦了。

(5). 技巧
  • Git源代码中的文件 git-completion.bash,将自动匹配命令。
原创粉丝点击