首页 > 技术文章 > Git基础操作

ZYTZ 原文

  git pull强行覆盖本地文件方法:

  如果您有任何本地更改,将会丢失。无论是否有--hard选项,任何未被推送的本地提交都将丢失。如果您有任何未被Git跟踪的文件(例如上传的用户内容),这些文件将不会受到影响。

  1.  git fetch --all

  2.  git reset --hard origin/master

     git reset --hard origin/<branch_name>  (其他分支)


  初始化一个Git仓库:$ git init

  查看隐藏目录:$ ls -ah

  添加文件到Git仓库,分两步:
    1.$ git add filename(可反复多次使用,添加多个文件)
    2.$ git commit -m "message"

  查看工作区的状态:$ git status

  查看修改内容:$ git diff

  查看提交历史:$ git log

  查看历史的版本号:$ git log --pretty=oneline

  退回某个版本:$ git reset --hard commit_id
    p.s. commit id(版本号)可以是HEAD^(上一版)、HEAD^^(上上一版)、HEAD~100(上100版)或实际版本号的前几位

      hard是参数,也可改为soft等等,功能不同。 

  查看命令历史:$ git reflog

  查看工作区和版本库里面最新版本的区别:$ git diff HEAD -- filename

  丢弃工作区的修改,让文件回到最近一次git commit或git add时的状态:$ git checkout -- filename

  把暂存区的修改撤销掉,重新放回工作区:$ git reset HEAD filename

  关联一个远程库:$ git remote add origin git@server-name:path/repo-name.git
    例:$ git remote add origin git@github.com:FanSolomon/learngit.git(path写自己GitHub的账号名)

  第一次推送master分支的所有内容:$ git push -u origin master

  此后推送最新修改:$ git push origin master

  克隆某仓库到本地:$ git clone git@server-name:path/repo-name.git
    例:$ git clone git@github.com:FanSolomon/TEST.git(path写自己GitHub的账号名)


  创建+切换分支:$ git checkout -b name

  创建分支:$ git branch name

  切换分支:$ git checkout name

  查看分支:$ git branch

  合并某分支到当前分支:$ git merge name

  删除分支:$ git branch -d name

  查看分支合并图:$ git log --graph
    例:$ git log --graph --pretty=oneline --abbrev-commit

  强制禁用Fast forward模式合并分支:$ git merge --no-ff dev
    p.s.Fast forward模式下,删除分支后,会丢掉分支信息,看不出曾经做过合并。
         普通模式合并,合并后的历史有分支,能看出曾经做过合并。

  "储藏"当前工作现场:$ git stash

  查看工作现场:$ git stash list

  恢复工作现场:$ git stash pop(恢复的同时删除了stash的内容)
         $ git stash apply(恢复后stash内容并不删除)
    p.s.也可以多次stash,恢复的时候先用git stash list查看,然后恢复指定的stash,用命令$ git stash apply stash@{0}

  删除一个没有被合并过的分支:$ git branch -D name

  查看远程库的信息:$ git remote(更详细$ git remote -v)

  推送分支:$ git push origin name
    p.s.Git中分支完全可以在本地自己藏着玩,是否推送视心情而定

  在本地创建和远程分支对应的分支:$ git checkout -b branch-name origin/branch-name(本地和远程分支的名称最好一致)

  推送分支失败时抓取远程的新提交:$ git pull
    p.s.此时git pull失败,因为没有指定本地dev分支与远程origin/dev分支的链接,根据提示,应设置dev和origin/dev的链接

  建立本地分支和远程分支的关联:$ git branch --set-upstream-to <branch-name> origin/<branch-name>
    例:$ git branch --set-upstream-to=origin/dev dev

  把本地未push的分叉提交历史整理成直线:$ git rebase
    p.s.将分叉的提交历史"整理"成一条直线,看上去更直观。缺点是本地的分叉提交已经被修改过了。


  新建标签:$ git tag name
    p.s.默认为HEAD,也可以指定一个commit id(如$ git tag v0.9 f52c633)

  创建带有说明的标签:$ git tag -a tagname -m "illustrate..."
    例:$ git tag -a v0.1 -m "version 0.1 released" 1094adb

  查看所有标签:$ git tag

  查看标签信息:$ git show tagname

  >创建的标签都只存储在本地,不会自动推送到远程。所以,打错的标签可以在本地安全删除。
  >如果标签已经推送到远程,要删除远程标签就麻烦一点,先从本地删除,然后从远程删除。

  推送一个本地标签:$ git push origin tagname

  推送全部未推送过的本地标签:$ git push origin --tags

  删除一个本地标签:$ git tag -d tagname

  删除一个远程标签:$ git push origin :refs/tags/tagname

具体用法可参考:

https://www.liaoxuefeng.com/


推荐阅读