git 学习笔记
目录
配置
删除文件
提交历史记录
撤销操作
远程
fetch 和 pull
推送到远程仓库
远程仓库的移除与重命名
分支
变基 rebase
#
1. 配置
1)查看配置信息
$ git config --list
git config
2)查看user
$ git config user.name
3)首次配置用户信息
$ git config --global user.name "username"
$ git config --global user.email your_email
2. 删除文件
$ git rm fileName //删除已跟踪文件,并且连带从工作目录中删除指定文件
$ git rm --cached fileName //只删除已跟踪文件,不会从磁盘中删除
3. 提交历史记录
常用选项
$ git log
-p | 按补丁格式显示每个跟新之间的差异 |
—stat | 显示每次更新的文件修改统计信息 |
—shortstat | 只显示—stat中最后的行数修改添加移除统计 |
—name-only | 仅在提交信息后显示已修改的文件清单 |
—name-status | 显示新增、修改、删除的文件清单 |
—abbrev-commit | 仅显示SHA-1的前几个字符,而非所有的40个字符 |
—relative-date | 使用较短的相对时间显示(比如,”2 weeks ago”) |
—graph | 显示ASCII图形表示的分支合并历史 |
—decorate | 显示每个commit的引用(如:分支、tag等) |
—oneline | 每个提交记录只以一行的形式显示 |
常用组合:
$ git log --oneline
$ git log --oneline --graph
$ git log --oneline --graph --all //以单行简图的形式显示所有的分支
$ git log -n //只显示最近的n次提交
$ git log --author authorName //只显示指定作者相关的提交
3. 撤销操作
$ git commit --amend
例如:
$ git commit -m "new commit"
$ git add newFile
$ git commit --amend
最终只会有一个提交—第二次提交将代替第一次提交的结果
4. 远程
1)查看远程仓库
$ git remote
$ git remote -v //显示需要读写远程仓库使用的git保存的简写与其对应的URL
2)添加远程查库
$ git remote add <shortname> <url>
例:
$ git remote add origin https://github.com/hello/Hello.git
3)删除远程仓库
$ git remote rm remoteName
5. fetch 和 pull
$ git fetch [remote-name]
访问远程仓库,从中拉取所有你还没有的数据。执行完之后将拥有远程仓库中所有分支的引用,可以随时合并或查看。
需要注意的是,git fetch 命令会将数据拉取到你的本地仓库—它并不会自动合并或修改你当前的工作,当准备好是你必须手动将其合并入你的工作
例:
$ git fetch origin
从远程fetch后可通过如下命令将拉去的分支添加到当前的分支中:
$ git merge origin/master
其中 origin/master 为fetch下来的分支名称
也可以建立一个分支来指向该远程分支, 如:
$ git checkout -b remote_branch origin/master
fetch的另一个用法:
$ git fetch origin master:newbranch
该命令会在本地新建一个newbranch分支并将远程origin仓库的master分支代码下载到本地newbranch分支
pull: 该命令很少用
$ git pull <远程主机名> <远程分支名>
$ git pull origin master
6. 推送到远程仓库
$ git push [remote-name] [branch-name]
$ git push origin master
只有当你有克隆服务器的写入权限,并且之前没有人推送过时,这条命令才能生效。当你和其他人在同一时间克隆,他们先推送到上游然后你在推送到上游,你的推送就会毫无疑问地被拒绝。你必须先将他们的工作拉取下来并将其合并到你的工作后才能推送。
7. 远程仓库的移除与重命名
移除:
$ git remote rm remoteName
重命名
$ git remote rename oldName newName
修改地址:
$ git remote origin set-url [new url]
或者先删后加
$ git remote rm origin
$ git remote add origin [url]
8. 分支
1)创建分支
$ git branch branch_name //创建一个名为branch_name的分支
注:该命令仅创建一个分支,并不会自动切换到新分支中去
2)切换分支
$ git checkout branch_name //切换到branch_name分支
3)创建分支的同时切换到新创建的分支
$ git branch -b new_branch_name
它是下面两条命令的简写
$ git branch new_branch_name
$ git checkout new_branch_name
4) 删除分支
$ git branch -d branch_name
5)分支的合并
例:将名为test的分支合并到master分支中
$ git checkout master
$ git merge test
6)合并两个没有关系的分支
$ git merge branch_name --allow-unrelated-histories
7)遇到冲突的分支合并
如果在两个不同的分支中,对同一个文件部分进行了不同的修改,Git就没法干净的合并它们。如上面的分支的合并的例子中,如果master分支和test分支都同时对README.md文件进行了修改,那么执行一下命令后
$ git merge test
此时Git已经做了合并操作,但是没有自动地创建一个新的合并提交。Git会停下来,等待你去解决合并产生的冲突。此时你可以在合并冲突后的任意时刻使用git status命令来查看那些因包含合并冲突而处于未合并(unmerged) 状态的文件.
当自己手动解决玩所有文件里的冲突之后,对每个文件使用git add命令将其标记为冲入已解决。一旦暂存这些原本有冲突的文件,Git就会将他们标记为冲突已解决。之后可以使用git commit命令提交完成分支的合并。
8)其他操作
$ git branch -v //查看每一个分支的最后一次提交
$ git branch -vv //查看所有的本地分支,并显示更多的信息(是否跟踪远程分支)
$ git branch --merged //查看已经合并到当前分支的分支
$ git branch --no-merged //查看没有合并到当前分支的分支
9. 变基 rebase
使用方式一:
$ git checkout experiment
$ git rebase master //将experiment变基到master分支
$ git checkout master
$ git merge experiment //合并分支
使用方式二:
$ git rebase [basebranch] [topicbranch] //将topicbranch变基到basebranch
如上例子:
$ git rebase master experiment //这样做就不必先checkout到experiment
$ git checkout mater
$ git merge experiment
一般变基的目的是为了确保在向远程分支推送时能保持历史的整洁。在这种情况下,你首先在自己的分支里进行开发,当开发完成时,你需要将你的代码变基到 origin/master上,然后再向主项目提交修改。这样的话,该项目的维护者就不再需要进行整合工作,只需要更快合并即可。
还没有评论,来说两句吧...