【linux命令讲解大全】014.Git:分布式版本控制系统的先驱和常用命令清单(三)

2024-03-02 11:26:22 浏览数 (1)

查看某个文件历史

  • git log --pretty=oneline 文件名:列出文件的所有改动历史
  • git show c178bf49:某次的改动的修改记录
  • git log -p c178bf49:某次的改动的修改记录
  • git blame 文件名:显示文件的每一行是在那个版本最后修改。
  • git whatchanged 文件名:显示某个文件的每个版本提交信息:提交日期,提交人员,版本号,提交备注(没有修改细节)

打造自己的git命令

代码语言:javascript复制
git config --global alias.st status
git config --global alias.br branch
git config --global alias.co checkout
git config --global alias.ci commit

配置好后再输入git命令的时候就不用再输入一大段了,例如我们要查看状态,只需输入:

代码语言:javascript复制
git st

中文乱码的解决方案

代码语言:javascript复制
git config --global core.quotepath false

新建仓库

初始化
代码语言:javascript复制
git init
获取状态
代码语言:javascript复制
git status
添加
代码语言:javascript复制
git add file  # .或*代表全部添加
git rm --cached <added_file_to_undo>  # 在commit之前撤销git add操作
git reset head  # 比上面更方便的方法
提交更新
代码语言:javascript复制
git commit -m "message"  #此处注意乱码
远程
代码语言:javascript复制
git remote add origin git@github.com:JSLite/test.git  # 添加源
推送
代码语言:javascript复制
git push -u origin master  # push同时设置默认跟踪分支
git push origin master
git push -f origin master  # 强制推送文件,缩写-f(全写--force)
克隆
代码语言:javascript复制
git clone git://github.com/JSLite/JSLite.js.git
git clone git://github.com/JSLite/JSLite.js.git mypro  # 克隆到自定义文件夹
git clone [user@]example.com:path/to/repo.git/  # SSH协议还有另一种写法。

git clone支持多种协议,除了HTTP(s)以外,还支持SSH、Git、本地文件协议等,下面是一些例子。git clone <版本库的网址> <本地目录名>
$ git clone http[s]://example.com/path/to/repo.git/
$ git clone ssh://example.com/path/to/repo.git/
$ git clone git://example.com/path/to/repo.git/
$ git clone /opt/git/project.git 
$ git clone file:///opt/git/project.git
$ git clone ftp[s]://example.com/path/to/repo.git/
$ git clone rsync://example.com/path/to/repo.git/

本地操作

获取帮助信息
代码语言:javascript复制
git help config
添加
代码语言:javascript复制
git add *  # 跟踪新文件
git add -u [path]  # 添加[指定路径下]已跟踪文件
移除文件
代码语言:javascript复制
rm * & git rm *  # 移除文件
git rm -f *  # 移除文件
git rm --cached *  # 取消跟踪
git mv file_from file_to  # 重命名跟踪文件
查看提交记录
代码语言:javascript复制
git log  # 查看提交记录
提交更新
代码语言:javascript复制
git commit  # 提交更新
git commit -m 'message'  # 提交说明
git commit -a  # 跳过使用暂存区域,把所有已经跟踪过的文件暂存起来一并提交
git commit --amend  # 修改最后一次提交
git commit log  # 查看所有提交,包括没有push的commit
git commit -m "#133"  # 关联issue,任意位置带上#符号加上issue号码
git commit -m "fix #133"  # commit关闭issue
git commit -m '概要描述'$'nn''1.详细描述'$'n''2.详细描述'  # 提交简要描述和详细描述
撤销更新
代码语言:javascript复制
git reset HEAD *  # 取消已经暂存的文件
git reset --mixed HEAD *  # 同上
git reset --soft HEAD *  # 重置到指定状态,不会修改索引区和工作树
git reset --hard HEAD *  # 重置到指定状态,会修改索引区和工作树
git reset -- files *  # 重置index区文件
撤销操作
代码语言:javascript复制
git revert HEAD  # 撤销前一次操作
git revert HEAD~  # 撤销前前一次操作
git revert commit  # 撤销指定操作
切换分支和恢复文件
代码语言:javascript复制
git checkout -- file  # 取消对文件的修改(从暂存区——覆盖worktree file)
git checkout branch|tag|commit -- file_name  # 从仓库取出file覆盖当前分支
git checkout HEAD~1 [文件]  # 将会更新working directory去匹配某次commit
git checkout -- .  # 从暂存区取出文件覆盖工作区
git checkout -b gh-pages 0c304c9  # 这个表示从当前分支commit哈希值为0c304c9的节点,分一个新的分支gh-pages出来,并切换到gh-pages
查看差异
代码语言:javascript复制
git diff file  # 查看指定文件的差异
git diff --stat  # 查看简单的diff结果
git diff  # 比较Worktree和Index之间的差异
git diff --cached  # 比较Index和HEAD之间的差异
git diff HEAD  # 比较Worktree和HEAD之间的差异
git diff branch  # 比较Worktree和branch之间的差异
git diff branch1 branch2  # 比较两次分支之间的差异
git diff commit commit  # 比较两次提交之间的差异
git diff master..test  # 上面这条命令只显示两个分支间的差异
git diff master...test  # 你想找出'master'、'test'的共有父分支和'test'分支之间的差异,你用3个'.'来取代前面的两个'.'
储藏现场
代码语言:javascript复制
git stash  # 将工作区现场(已跟踪文件)储藏起来,等以后恢复后继续工作。
git stash list  # 查看保存的工作现场
git stash apply  # 恢复工作现场
git stash drop  # 删除stash内容
git stash pop  # 恢复的同时直接删除stash内容
git stash apply stash@{0}  # 恢复指定的工作现场,当你保存了不止一份工作现场时。

合并

普通合并
代码语言:javascript复制
git merge --squash test  # 合并压缩,将test上的commit压缩为一条
拣选合并
代码语言:javascript复制
git cherry-pick commit  # 拣选合并,将commit合并到当前分支
git cherry-pick -n commit  # 拣选多个提交,合并完后可以继续拣选下一个提交
变基
代码语言:javascript复制
git rebase master  # 将master分之上超前的提交,变基到当前分支
git rebase --onto master 169a6  # 限制回滚范围,rebase当前分支从169a6以后的提交
git rebase --interactive  # 交互模式,修改commit
git rebase --continue  # 处理完冲突继续合并
git rebase --skip  # 跳过
git rebase --abort  # 取消合并

0 人点赞