Git 是一个很好用的版本控制系统, 本文对于常用的一些命令进行了汇总.
创建一个存储仓库(repository)
https://github.com/ 右上角点击 "+" 号, New repository, 创建一个仓库, 之后输入仓库的名字, 描述和选择 pubic/private.
配置 SSH Key
为了能从远程仓库拉取文件到本地或将本地文件 push 到远程仓库, 需要配置 SSH key, 否则会出现全选不允许的错误(permission denied). 点击右上角头像 -->settings-->SSH and GPG keys, 点击 New SSH key.
然后 cd ~/.SSH, 进入本机 SSH 目录, 找到 xxx.pub 的文件, 将文件内容复制到 Key 文本框中, 点击 Add SSH key.
拷贝远程仓库到本地(Git clone)
当仓库创建后, 会创建一个默认的分支 master, 代码, 文件保存在远程存储仓库中, 如果我们要把远程代码拿到本地来. 进入我们新创建的参考中, 在右侧可以看到一个绿色的按钮 "Clone or download", 点击之后可以看到一个 Git url, 或者可以用 ZIP 的格式把文件下载下来, 如果用 Git url 的话需要用到命令:
Git clone https://github.com/XXX/$repository_name.Git
这样在当前路径下就出现了 $repository_name 的文件夹, 里面就是远程仓库中的文件.
创建分支(Git checkout -b)
从远程考本到本地后, 我们是在 master 分支上, 想要查看当前代码在哪个分支上可以使用命令, 会列出本地的分支都有哪些, 以及当前是在哪个分支上.
Git branch
要查看本地仓库的状态可以使用命令, 可以看到哪些文件进行了修改等信息.
Git status
如果要再当前分支上再创建出一个新的分支, 使用命令, 这样就会创建出一个名字为 branch_name 的新分支, 并且会自动换到这个分支上.
- Git branch branch_name // 创建 branch_name 分支
- Git checkout -b branch_name // 创建 branch_name 分支并从当前分支切换到新的分支
如果已经创建了 branch_name 分支, 那么我可以在 master 分支和新创建的分支上进行切换, 使用命令, 这样又回到了 master 分支上.
Git checkout master
但新创建出来的分支只是在本地仓库中, 如果要同步到远程仓库中, 需要使用命令, 这样在远程仓库中就会增加一个名字为 branch_name 的分支.
Git push origin branch_name
提交修改(Git commit)
当对文件进行修改后, 如果想查看具体某一个文件哪里进行了修改与之前有什么不同, 可以使用命令.
Git diff file_name
需要提交这些修改时, 首先要使用命令, 将带提交的文件加入临界存储区.
Git add file1 file2
然后提交并加上提交说明, 使用命令.
Git commit -m "commit message"
然后同步到远程分支上.
Git push
查看提交历史(Git log)
在每次提交修改的时候都会带一些 commit message, 如果想看当前分支的提交历史, 可以使用命令:
Git log
还可以看一下某个文件某行内容被谁修改过, 可以使用命令:
Git blame file_name
将多个 commit 合并为一个(Git rebase)
通过 Git log 我们可以看到, 每次提交都对应了一个编号(commit_id), 如果我希望将多个 commit 合并为一个 commit 时, 需要使用命令, 但是这个合并是有限制的, 必须是从最近的一次提交开始的连续几个提交.
Git rebase -i commit_id
之后会进入一个配置文件, 里面列出了每次 commit 的 id 和 list, 前面还有一个字符, 表示要进行 rebase 的动作, 将最上面那条记录的首字符修改为 "r", 剩下修改为 "f".f 表示后面的这条 commit 合并前面的这条 commit,r 表示使用这个 commit, 并且可以重新编辑 commit message. 修改后继续, 就可以从新编辑 commit message.
这时可以看到多条 commit 记录被合并到一条了, 然后将新的修改 push 上去, 需要使用命令, 这里需要使用 force-push 才能将 rebase 后的修改推到远程仓库.
Git push -f branch_name
与远程仓库同步(Git fetch)
当有多人同时对项目进行开发时, 可能有其他人已经向 branch 提交了新的 commit, 这是我们本地的文件就不是最新的或者说与远程仓库不同步, 如果想获取远程分支都有哪些修改, 可以使用命令.
Git fetch // 只获取远程 branch 修改的信息, 并不把本地分支与远程分支同步
假设现在在 master 分支上, 如果要把本地文件与远程文件同步, 需要使用命令.
- Git fetch // 获取远程 branch 修改的信息
- Git reset --hard origin/master // 将本地 branch 的指针指向远程 master 的位置
将当前修改暂时保存(Git stash)
在开发过程中可能会遇到这样的情况, 在开发一个模块的过程中, 来了一个更紧急的任务, 而之前的开发过程进行了一半, 我们需要保留劳动成果, 等待一会继续开发, 这时候就需要使用命令.
- Git stash // 将没有提交的修改保存
- Git stash list // 查看 stash 中都有哪些记录
从 Git stash list 中我们可以看到, 每一个 stash 中的存储都是有编号的, stash{0},stash{1}等. 如果这时候紧急的任务已经完成了, 我们需要继续之前的开发, 可以使用命令, 将之前存储在 stash 中的修改恢复回来.
Git stash pop stash{0} // 将编号为 {0} 的这个修改恢复回来
如果要清空 stash, 可以使用命令.
Git stash drop
来源: https://www.cnblogs.com/Moon-Light-Dream/p/10293496.html