Git是非常便利的版本管理工具,之前学习过一段时间,了解了其基本概念,但是其命令繁多,实在难以记住,常常需要查阅笔记,现在把笔记专门整理出来,以备查阅。这些命令及其解析来自于Maning.Learn.Git.in.a.Month.of.Lunches
Chapter 3: Getting oriented with Git
1
2
3
4
5
6
7
8
9
|
git --version --global user.name --> 输出git的版本号
git config --global user.name USER_NAME --> 设置当前的git用户名
git config --global user.email USER_EMAIL --> 设置当前的git用户邮箱
git config --list --> 查看当前repository的用户信息
git config user.name --> 查看git用户名
git config user.email --> 查看git用户邮箱
git help --> 输出git的帮助信息,包含21个常见命令
git help glossary --> 输出git的术语列表
git --paginate help -a --> 以单页形式输出git所有命令的帮助信息
|
Chapter 4: Making and using a Git repository
1
2
3
4
5
6
7
|
git init --> 初始化当前repository
git status --> 查看当前文件的修改修改状态,追踪文件修改
git add file --> 将文件file当前的状态添加到staging area中
git commit -m MSG --> 将staging area中的文件状态提交到repo中,并生成对应的commit,commit使用MSG作为注释
git log --> 查看repo日志信息
git log --stat --> 查看日志信息,并显示已经修改的文件
git ls-files --> 列出repo中的文件列表
|
Chapter 6: Tracking and updating files in Git
1
2
3
4
5
6
|
git diff --> 比较当前的working area中的相应文件和repo中记录的历史状态
git diff --staged --> 比较staging area(缓冲区)中文件的状态和repo中的历史状态
git add --dry-run . --> 查看git add . 命令将要执行的操作
git add . --> 添加当前工作目录下的所有新文件到staging area的工作列表中
git log --oneline --> 以单行方式输出日志信息
git log --shortstat --oneline --> 以单行形式输出日志信息,并输出每个commit中发生改变的文件
|
Chapter 7: Committing parts of changes
1
2
3
4
5
|
git rm file --> 从staging area中删除文件file,working area中也会同步执行该操作
git mv file1 file2 --> 将staging area中的file1重命名为file2,working area中同步执行
git add -p --> 选择文件的部分改变加入到staging area中
git reset file --> 重置staging area,取消所有git add添加的文件变化
git checkout file --> 将working area中的文件改写为repo中的状态
|
When to add commit to repo!
- 添加或者删除一个文件
- 重命名一个文件
- 更新一个已经运行状态良好的文件
- 当不再参与该项目时
- 当可能引入有问题的代码时
Chapter 8: The time machine that is Git
1
2
3
4
5
6
7
8
9
10
11
|
git log --parents --> 在日志信息中输出父commit
git log --parents --abbrev-commit --> 在日志中输出commit,但是显示缩略的SHA1值
git log --patch --> 输出日志信息,显示commit间的差异
git log --stat --> 输出日志信息,以摘要形式显示commit间的差异
git log --patch-with-stat --> 以上两条命令的综合
git log --oneline file --> 以单行形式输出日志信息,并且仅输出与file相关的commit
git rev-parse [commit_name] --> 将commit_name转换为SHA1值
git checkout SHA1_ID --> 将当前文件回溯到相应commit记录的状态,HEAD指向该commit
git tag TAG_NAME -m MSG SHA1_ID --> 为相应commit添加注释为MSG的tag
git tag --> 输出所有的tag
git show TAG_NAME --> 输出tag所代表的commit的详细信息
|
When and to create brances?
- master branch应当设定为当前代码的基础分支,进一步的开发工作的展开以此为基准创建新的分支,以保证新分支不会影响到master branch
- 当引入新的代码或者修改已经存在的代码,应当设定新的分支,以保证新的开发过程的commit不会直接影响master branch
Chapter 9: Taking a fork in the road
1
2
3
4
5
6
7
8
9
10
11
|
git branch --> 输出当前左右的branch
git branch dev --> 创建新的分支dev,该分支以当前分支的尾节点为尾
git branch -d dev --> 删除分支dev
git log --graph --decorate --pretty=oneline --all --abbrev-commit --> 图形化输出所有分支的状态
git branch -v --> 列出所有分支,并显示SHA1值
git branch BRANCH_NAME SHA1_ID --> 以SHA1_ID节点为尾创建新分支
git checkout -b NEW_BRANCH OLD_BRANCH --> 创建与OLD_BRANCH同尾的新分支,并切换到新分支
git reflog --> 输出分支切换的历史记录
git stash --> 暂存当前分支的工作状态,为分支切换作准备
git stash list --> 列出所有处于暂存状态的操作
git stash pop --> 将stash栈空间的顶部状态同步到working area,并移除栈顶
|
Chapter 10: Merging branches
1
2
3
4
5
6
7
|
git diff branch1..branch2 --> 比较分支1和分支2的区别
git diff --name-status branch1..branch2 --> 给出分支1和分支2的差异的汇总,并给出每一个有变化的文件的名字和状态
git merge branch2 --> 将branch2合并到当前分支
git log -1 --> 只显示当前最近的commmit的日志信息
git mergetool --> 打开分支合并处理工具,解决分支冲突
git merge --abort --> 放弃对冲突分支的合并
git merge-base branch1 branch2 --> 显示分支1和分支2的base commit
|
Chapter 11: Cloning
1
2
3
4
5
6
|
git clone source destination_dir --> 克隆source到本地的destination_dir
git log --oneline --all --> 显示所有分支的所有commit
git log --simplify-by-decoration --decorate --all --oneline --> 简化显示日志信息
git branch --all --> 除了显示本地分支,还显示远端追踪分支
git clone --bare source destination_dir --> 克隆bare repository
git ls-tree [HEAD;SHA1;tag] --> 显示某个commit的所有文件
|
What is bare repository?
- bare repo是仅含repo的副本
- bare repo含有原项目的所有信息,对bare repo使用git clone命令,可以复制出包含working area的普通副本
- bare repo不支持一般的git操作,改变bare repo的唯一方式是通过pull向它提交新的commit
- bare repo一般作为所有其他副本的源,但是bare repo可以有其他任意副本再次生成(分布式思想)
Chapter 12: Collaborating
1
2
3
4
5
6
|
git checkout -f master --> 放弃当前未保存的改变,强行切换到master分支
git remote --> 显示当前repo的所有remote
git remote -v show --> 显示remote的名字,并显示remote的URL
git remote add new_remote new_remote_URL --> 为当前repo添加remot
git ls-remote REMOTE --> 显示REMOTE的详细信息
GIT_TRACE_PACKET git ls-remote REMOTE --> 追踪REMOTE的网络交互历史
|
Chapter 13: Pushing your changes
1
2
3
4
5
6
7
8
9
10
11
12
13
|
git push origin master --> push master分支到名为origin的远端
git push --> push当前分支到远端对应的追踪分支
git push --set-upstream origin new_branch --> 在origin远端创建追踪new_branch的新分支
git config --get-regexp branch --> 列出匹配字符串“branch”的所有config项目
git branch -d localbranch --> 删除本地分支localbranch
git push origin :remotebranch --> 删除origin远端名为remotebranch的分支
git tag -a TAG_NAME -m MSG SHA1_ID --> 为对应于SHA1_ID的commit创建注释为MSG的tag,tag的名称为TAG_NAME
git push origin TAG_NAME --> 将本地的名称为TAG_NAME的tag提交到远端
git push --tags --> 将所有tag提交到远端
git push origin :TAG_NAME --> 将远端名称为TAG_NAME的tag删除
git tag -d TAG_NAME --> 删除本地名称为TAG_NAME的tag
git config --global push.default simple --> 设定push.default字段值为simple
git remote -v show origin --> 输出追踪信息
|
Chapter 14: Keeping in sync
1
2
3
4
|
git pull --> 等价于git fetch加上git merge,默认情况下会发生前向自动合并
git fetch --> 向远端发出请求,以更新当前commit
git merge FETCH_HEAD --> 将fetch得到的FETCH_HEAD commit合并到当前分支上
git pull --ff-only --> 当且仅当FETCH_HEAD是当前分支的衍生时进行合并
|
Chapter 15: Softwre archaeology
1
2
3
4
5
6
7
8
9
10
11
12
13
|
git log --merges --> 列出所有merge操作生成的commit
git log --oneline FILE --> 列出所有与文件FILE相关的commit
git log --grep=STRING --> 列出所有message与字符串STRING匹配的commit
git log --since MM/DD/YYYY --until MM/DD/YYYY --> 列出在特定时间段内的commit
git shortlog --> 以author用户名为标签汇总显示commit
git shortlog -e --> 以author的用户邮箱为标签汇总显示commit
git log --stat HEAD^..HEAD --> 列出当前commit和其前驱commit间的commit,并显示相关文件
git log --patch HEAD^..HEAD --> 列出当前commit和其前驱commit间的commit,并显示文件的变更信息
git log --author=AUTHOR --> 列出author为AUTHOR的commit
git name-rev SHA1_ID --> 根据最近分支,显示特征值为SHA1_ID的commit的名字
git branch -r --contains SHA1_ID --> 显示包含特征值为SHA1_ID的commit的分支
git blame FILE --> 显示文件FILE的所有历史修改信息
git --no-paper blame FILE > FILE-annotate --> 将文件FILE的blame信息输出到wenjFILE-annotate中
|
Chapter 16: Understanding git rebase
1
2
3
4
5
6
|
git log --oneline master..new_feature --> 输出master分支之后,new_feature分支之前的节点(不包含master分支的节点)
git rebase master --> 将master分支的最新节点作为当前分支的base节点
git reflog --> 输出HEAD节点的变迁日志reflog
git reset --hard HEAD@{4} --> 恢复当前状态到HEAD@{4}所记录的状态,--hard表示同时执行staging area和working area的变更
git rebase --interactive master --> 以交互式的方式进行rebase操作,选择squash可以合并本分支的commit
git cherry-pick SHA1_ID --> 向当前所在分支添加已经存在的其他分支的commit
|
Others
可以配置 .gitignore 文件以忽略目录中的某些文件,配置规则可以参见git docs
若在配置 .gitignore 文件前已经将相关文件提交到staging area中,那么可以使用**git rm -r --cached .
命令撤销,然后再次使用git add .
**命令将working area中修改的相关文件提交到staging area。如果不想在项目代码中提交 .gitignore 文件,那么可以在 .git/info/exclude 文件中添加.gitignore行。.gitignore模板可以参见gitignore项目