初始化
- Git init
- Git add *
- Git commit -m 'message'
Git remote add origin https 链接
- Git push origin master
- add
. 与 *: Git add . 会把本地所有 untrack 的文件都加入暂存区, 并且会根据. gitignore 做过滤, 但是 Git add * 会忽略. gitignore 把任何文件都加入 . 省略表示., 即当前目录.
Git add -u []: 把中所有 tracked 文件中被修改过或已删除文件的信息添加到索引库. 它不会处理 untracted 的文件.
Git add -A: []表示把中所有 tracked 文件中被修改过或已删除文件和所有 untracted 的文件信息添加到索引库.
- commit
- Git commit --amend # 可以继续使用上次的提交信息
- remote
- # 查看关联的远程仓库的名称
- Git remote
- # 查看关联的远程仓库的详细信息
- Git remote -v
添加远程仓库的关联
远程仓库的名称一般默认为 origin , 你可以设置为其他的名称.
通过 Git clone 下载项目到本地时, 项目文件夹中的 .Git 目录就是版本库目录.
.Git 目录中的 config 文件中有远程仓库的关联配置.
- # 远程仓库的 url, 可采用 http 协议或 SSH(Git) 协议
- Git remote add origin <url>
删除远程仓库的关联
Git remote remove <name>
修改远程仓库的关联
关联远程仓库的协议 http 或 SSH 的修改. 主要有三种方法:
第一种: 使用 Git remote set-url 命令, 更新远程仓库的 url
Git remote set-url origin <newurl>
第二种: 先删除 (remove) 之前关联的远程仓库, 再来添加 (add) 新的远程仓库关联
第三种: 直接修改项目目录下的 .Git 目录中的 config 配置文件.
reset
Git reset --soft HEAD^** 不删除工作空间改动代码, 撤销 commit, 不撤销 add .
--hard 删除工作空间改动代码, 撤销 commit, 撤销 add .
--mixed (默认)不删除工作空间改动代码, 撤销 commit, 并且撤销 add .
- Git reset head #撤销所有 add 的文件
- Git reset filename #撤销 add 的文件
- push
Git push <远程主机名> <本地分支名>:<远程分支名>
如果省略远程分支名, 则表示将本地分支推送与之存在 "追踪关系" 的远程分支(通常两者同名), 如果该远程分支不存在, 则会被新建.
如果省略远程分支名, 则表示将本地分支推送与之存在 "追踪关系" 的远程分支(通常两者同名), 如果该远程分支不存在, 则会被新建.
- # 慎用! 删除远程仓库的分支
- Git push origin :master
- # 等同于
- Git push origin --delete master
如果当前分支与多个主机存在追踪关系, 则可以使用 - u 选项指定一个默认主机, 这样后面就可以不加任何参数使用 Git push.
--force 强制提交当前版本号, 一般都不建议, 也不会去使用.
pull
取回远程主机某个分支的更新, 再与本地的指定分支合并. Git pull = Git fetch + Git merge
Git pull <远程主机名> <远程分支名>:<本地分支名>
Git Fetch 拉取远程代码到本地并且在拉取过程中如果发现与本地文件有冲突会提示出来. 通过 rebase 可以解决冲突文件. 但是如果直接 pull 的话会覆盖本地冲突文件, 所以一般拉取代码都先 commit->fetch->rebase. 不建议直接 pull, 并且在 push 之前每次都要先 fetch->rebase, 防止将别人代码覆盖.
- branch
- Git branch newbranch
- Git branch # 显示所有分支
- Git checkout newbranch
- Git merge newbranch # 在当前分支上合并 newbranch
- Git branch -D newbranch # -d 也可以删除
- # -a 显示本地分支和远程分支
- # -r 显示远程分支
- merge/rebase
Git merge: 将两个分支, 合并提交为一个新提交(生成一个新的合并点), 并且新提交有 2 个 parent.
Git rebase: 会取消分支中的每个提交, 并把他们临时存放, 然后把当前分支更新到最新的 origin 分支, 最后再把所有提交应用到分支上.
merge/rebase 都可以用来合并分支, 并体现在代码树中
发生冲突时: merge 发生冲突解决后 ->add->commit->push;rebase 发生冲突解决后 ->add->Git rebase --continue 或者 --skip 忽略冲突
merge 合并的代码树如图所示:
rebase 合并的代码树如图所示:
- stash
- Git stash save 'message' # 暂存本地修改的代码
- Git stash list # 查看 stash 了哪些存储
- Git stash show [email protected]{
- X
- } # 显示 [email protected]{
- X
- } 做了哪些改动
- Git stash show [email protected]{
- X
- } -p # 显示 [email protected]{
- X
- } 存储的改动
- Git stash apply [email protected]{
- X
- } # 应用缓存堆栈中的对应 [email protected]{
- X
- } 存储, 但不会从存储列表中删除
- Git stash pop [email protected]{
- X
- } # 恢复之前缓存的工作目录, 将缓存堆栈中的对应 [email protected]{
- X
- } 删除
- Git stash drop [email protected]{
- X
- } # 丢弃 [email protected]{
- X
- } 存储, 从列表中删除这个存储
- Git stash clear # 删除所有缓存的 stash
- log
- Git log
- Git log -2 #→查看最近几条记录
- Git log -p -1 #→-p 显示每次提交的内容差异, 例如仅查看最近一次差异
- Git log --stat -2 #→--stat 简要显示数据增改行数, 这样能够看到提交中修改过的内容, 对文件添加或移动的行数, 并在最后列出所有增减行的概要信息
- Git log --pretty=oneline #→--pretty 根据不同的格式展示提交的历史信息
- Git log --oneline --graph
- Git log --pretty=fuller -2 #→以更详细的模式输出提交的历史记录
- Git log --pretty=fomat:"%h %cn" #→查看当前所有提交记录的简短 SHA-1 哈希字串与提交着的姓名.
- Git show ^HEAD --stat # 查看某次提交中涉及到的文件
- Git reflog # 查看所有分支的所有操作记录(包括已经被删除的 commit 记录和 reset 的操作)
- tag
- Git tag # 查看所有标签
- Git tag <tag name> ^head # 在某个 commit 上打 tag
- Git push origin <tag name> # 推送一个标签到远程
- Git push origin --tags # 推送全部未推送的本地标签
- Git tag -d <tag name> # 本地删除标签
- Git push origin :refs/tags/<tag name> # 本地 tag 删除后删除远程 tag
- other
- Git diff # 可以对比当前文件与仓库已保存文件的区别
- Git checkout filename #撤销修改的文件(已经被 Git 跟踪, 修改后还没有 add)
Git ls-files 命令是用来查看暂存区中文件信息.
- Git rm filename # 删除暂存区或分支上的文件, 本地也会删除;
- Git rm file = rm file+ Git add file
- Git rm --cached filename # 删除暂存区或分支上的文件, 但本地保留
Git 命令
来源: http://www.bubuko.com/infodetail-3653588.html