git常用命令

git常用命令

1.git diff

  1. 本身只显示尚未暂存的改动,git diff --staged显示已暂存和最后一次提交的差异。
  2. --check选项检查空白错误,你的提交里不应该包含任何空白错误。
  3. git diff master..contrib查看当前主题分支contrib和master分支的共同祖先比起来,该分支的工作,即主题分支做了哪些修改,非常有用。

2.git commit

  1. -a可以跳过add直接把所有已跟踪过的文件暂存起来一起提交,但要小心将不需要的文件添加到提交中。

  2. --amend会将暂存区中的文件提交到上次的提交中,提交后发现忘记了暂存某些修改可以先add这些修改,然后用--amend选项修复这个commit。

    修改之前某次commit的工作流:

    1. git stash存储当前工作状态;
    2. git rebase <commit-id>^ --interactiveHEAD移动到要修改的commit上;
    3. 找到要修改的commit,把首行的pick改成edit
    4. 修改要修改的地方;
    5. git commit --amend追加改动到该提交;
    6. git rebase --continue移动HEAD回最新的commit;
    7. git stash pop恢复之前的工作状态。
  3. 第一行少于50个字符(25个汉字)简要描述,接着空白行hou再加更详细的描述,包括改动的动机和实现前后行为的对比,在72个字符(36个汉字)时换行。空行接着更进一步的段落,可以标号,使用悬挂式缩进。

3.git rm

  1. 如果要从git中移除某个文件,要用git rm从已跟踪文件清单中移除,同时会从当前工作区删除该文件。
  2. 如果要删除已经修改过或已放到暂存区的文件,则必须使用强制删除选项-f,这是一种防止误删还未添加到快照的数据的安全特性,因为这种数据将不能被恢复。
  3. 如果只想从git仓库和暂存区域中删除,而仍然希望保留在工作目录中,可以用--cached选项。
  4. git rm后可以列出文件或目录的名字,还可以用glob模式,但由于git有自己的文件模式扩展匹配方式,需要用反斜杠\来避免shell帮忙展开,如git rm log/*.log

4.git mv from to

  1. 将from文件命名为to并把重命名加入暂存区

5.git log

  1. -p选项显示每次提交引入的差异,-2可以只显示最近的两次提交,--stat选项可看到每次提交的简略统计信息(所有被修改的文件、多少文件被修改、哪些行被移除或添加)。
  2. --pretty能使用不同于默认格式的方式展示提交历史,如--pretty=oneline把每个提交放在一行显示,还有short/full/fuller,格式基本一致,详尽程度不同。--pretty=format:"%h - %an, %ar : %s"可以定制记录的显示格式。常用选项中有占位符的写法和意义。
  3. --graph选项添加一些ASCII字符串来形象地展示分支和合并历史。结合oneline或format使用尤其有用。
  4. --since=2.weeks列出最近两周的所有提交
  5. --author显示指定作者的提交,--grep搜索提交说明中的关键字,可指定多个搜索条件,会只输出匹配任意条件的输出,加上--all-match则只会输出全部匹配的输出。
  6. -S function_name会显示添加或删除了该字符串的提交。
  7. --no-merges避免合并提交弄乱历史记录
  8. 限制输出的选项
  9. contrib --not master查看contrib中排除master分支的提交,和git log master..contrib是一样的

6.git reset HEAD <file>

  1. 取消暂存在暂存区中的文件

7.git remote

  1. add <shortname> <url>添加一个新的远程git仓库,用git fetch <remote>来拉取最新的信息。如果当前分支设置了跟踪远程分支,就可以用git pull来自动抓取后合并该远程分支到当前分支,git clone会自动设置本地master分支跟踪克隆的远程仓库的master分支,运行git pull会从最初克隆的服务器上抓取数据并自动尝试合并到当前所在的分支。
  2. show <remote>能查看某一个远程仓库的更多信息,比如pull会和哪些分支合并,有哪些远程分支不在本地或已经从服务器移除。
  3. rename <remote old-name> <new-name>重命名分支,这也会修改所有远程跟踪的分支的名字,比如过去引用pb/master的现在会引用paul/master。
  4. remove paul移除远程仓库

8.git push <remote> <branch>

  1. 想将master分支推送到origin服务器时(clone时通常会自动设置好这两个名字),使用git push origin master就可以。只有当有所克隆服务器的写入权限,且之前没有人推送过,这条命令才会生效,当其他人先推送到上游你再推送到上游,你的推送会被拒绝,你必须先抓取他们的工作并合进你的工作后才能推送。
  2. git push -u origin featureB:featureBee把本地的featureB分支推送到上游的featureBee分支,-u是--set-upstream的缩写,可以为之后轻松推送和拉取配置分支。

9.git tag

  1. 直接使用列出所有的标签列表,-l(--list) "v1.8.5*"列出所有匹配的标签列表。
  2. git tag -a v1.4 -m "my ver 1.4"中-a创建附注标签,-m指定了存储在标签中的信息,没有指定信息会自动打开编辑器要求输入信息。git show v1.4会显示标签信息和与之对应的提交信息。不使用任何选项,只提供标签名字,git tag v1.4-1w就只创建没保存任何其他信息的轻量标签。Git tag -a v1.2 <commit-id>对过去的提交打标签。
  3. git push origin v1.5把标签推送到共享服务器,git push origin --tags把所有不在远程服务器的标签传送到那里。否则默认不会传送标签到远程服务器上。
  4. git tag -d v1.4删除本地的标签,git push origin --delete <tagname>删除远程标签。
  5. git log featureA..origin/featureA比较新抓取的featureA分支和同一分支的本地副本,输出新的工作日志。

10.git checkout

  1. git checkout <tagname>查看某个标签所指向的文件版本,但会处于“分离头指针”状态,这个状态下做出更改并提交标签不会变化,但新提交不属于任何分支,并且除非通过确切的哈希值否则无法访问,因此如果要修改旧版本的错误,通常需要创建一个新的分支:git checkout -b version2 v2.0.0。这只后又进行一次提交,这个分支会因为这个改动向前移动,这时会和v2.0.0标签稍微有些不同,要小心。
  2. -b dev origin/dev把自己的dev分支建立在远程跟踪分支上。
  3. --track origin/dev设置跟踪远程仓库的跟踪分支并切换到这个分支。

11.git config

  1. 创建git别名:

    $ git config --global alias.co checkout
    $ git config --global alias.br branch$ git config --global alias.ci commit
    $ git config --global alias.st status
    $ git config --global alias.unstage 'reset HEAD --'
    $ git config --global alias.last 'log -1 HEAD'
    $ git config --global alias.visual '!gitk'(执行外部命令)
    
  2. --global --list查看当前用户配置

12.git branch

  1. --merged或--no-merged显示已合并到当前分支或未合并到当前分支的分支。
  2. -d <branch-name>删除分支,如果分支包含未合并的工作会删除失败,除非用-D强制删除
  3. -vv查看设置的所有跟踪分支,这个命令不会连接服务器,显示的是上一次拉取之后的情况。
  4. -u origin/dev显式地设置上游分支。设置好跟踪分支后可通过@{u}来引用上游分支。

13.git rebase

  1. git rebase master dev目的是为了保持提交历史的整洁,但是禁止在有多人使用的分支使用rebase合并其他分支的代码!!否则会导致重复提交和提交历史混乱!!如果你只对不会离开你电脑的提交执行变基,那就不会有事。 如果你对已经推送过的提交执行变基,但别人没有基于它的提交,那么也不会有事。 如果你对已经推送至共用仓库的提交上执行变基命令,并因此丢失了一些别人的开发所基于的提交, 那你就有大麻烦了,你的同事也会因此鄙视你。如果你或你的同事在某些情形下决意要这么做,请一定要通知每个人执行 git pull --rebase 命令,这样尽管不能避免伤痛,但能有所缓解。总的原则是,只对尚未推送或分享给别人的本地修改执行变基操作清理历史, 从不对已推送至别处的提交执行变基操作,这样,你才能享受到两种方式带来的便利。

14.git add

  1. --patch部分暂存文件,如果一个文件的修改解决了不同的问题,拆解开来分别提交。

15.git merge

  1. --squash featureB(从现在的origin/master新开始一个新分支,在这个分支压缩featureB的改动,解决任何冲突,改变实现,并推送它为一个新的分支),git commit,git push myfork featureBv2
posted @   SamsonLannister  阅读(17)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示