Git 常用操作以及一些命令速查

/ Git / 没有评论 / 89浏览

git

基本概念


本地仓库

Repository

  1. 本地初始化

    // 本地初始化一个git仓库,客户端仓库
    # git init
    
    // 创建一个裸库,供多人分享使用,常用于服务端,非本地
    # git init --bare
    
  2. 从远端拉取仓库

    # git clone <版本库的网址>
    // 克隆远程仓库到当前文件夹
    # git clone https://git.coding.net/hymane/git-demo.git
    // 克隆远程仓库并指定文件夹名
    # git clone <版本库的网址> <dir>
    # git clone https://git.coding.net/hymane/git-demo.git myGitDir
    

    可以使用 -o 参数指定远程主机名

    # git clone -o remoteName <版本库的网址>
    

远程仓库

Remote

为了便于管理,Git要求每个远程主机都必须指定一个主机名。

git remote命令就用于管理主机名。

# git remote
origin
# git remote -v
origin	https://git.coding.net/hymane/git-demo.git (fetch)
origin	https://git.coding.net/hymane/git-demo.git (push)
# git remote show <主机名>
* remote origin
  Fetch URL: https://git.coding.net/hymane/git-demo.git
  Push  URL: https://git.coding.net/hymane/git-demo.git
  HEAD branch: master
  ......
# git remote add <主机名> <网址>
# git remote rm <主机名>
# git remote rename <原主机名> <新主机名>

分支(branch)

// 查看本地分支
# git branch
* master
  dev

* 表示当前分支为 master 分支 本地还有一个 dev 的分支

// 查看远程分支
# git branch -r
// 查看所有分支
# git branch -a
  dev
* master
  remotes/origin/HEAD -> origin/master
  remotes/origin/dev
  remotes/origin/master
# git checkout dev
Switched to branch 'dev'
Your branch is ahead of 'origin/master' by 1 commit.
  (use "git push" to publish your local commits)
# git checkout -b feature <baseBranch>
Switched to a new branch 'feature'

使用 -b 参数可以切换到指定分支,若分支不存在则创建对应分支,指定 baseBranch 可以基于一个基准分支进行创建,如果不指定则以当前分支进行创建新分支。

# git branch -d feature
Deleted branch feature (was d4887a4).

ps: 删除分支时当前分支不可以是待删除分支 可以先切换到其他分支

# git checkout dev
# git branch -d feature
# git branch --set-upstream master origin/master

远程和本地仓库互联

  1. 远程仓库更改取回本地(fetch)

    • 远程仓库有了更新(一般称为commit)就可以使用 fetch 命令拉取下来
    // 将远程主机所有更新全部拉回本地
    # git fetch <远程主机名>
    
    • 默认 git fetch 会拉取所有分支(branch)的更新到本地,如果只想拉取特定分支的更新可以指定分支名
    # git fetch <远程主机名> <分支名>
    
    • 比如拉取远程 origin 主机的 master 分支到本地
    # git fetch origin master
    
  2. 远程仓库更新直接取回到工作区 git pull 命令较为复杂,他首先是将远程某个分支更新拉回本地,再与本地指定分支合并。

# git pull <远程主机名> <远程分支名>:<本地分支名>

比如将远程主机 origin 上 dev 分支拉回本地并合并到本地 feature 分支

// 当前分支不一定是 feature 分支
# git pull origin dev:feature
# git pull origin dev

上面命令含义是将远程分支 origin/dev 分支拉取下来和本地当前分支合并,即先git fetch到本地仓库,然后git merge合并。

# git fetch origin
# git merge origin/dev
# git pull origin
# git pull
# git pull --rebase <远程主机名> <远程分支名>:<本地分支名>
// 危险
# git pull -p
  1. 本地更新推送到远程(push) 将本地的更新推送到远程主机仓库,供团队查看

    • git push 推送本地更新
    # push <远程主机名> <本地分支名>:<远程分支名>
    

    ps: 分支推送顺序的写法是<来源地>:<目的地>,所以git pull是<远程分支>:<本地分支>,而git push是<本地分支>:<远程分支>。

    • 如果省略远程分支名,表示推送到与之存在"追踪关系"的远程分支,一般和本地分支同名。
    # git push origin master
    

    上面的命令意思是将本地 master 分支推送到远程主机 origin 上的master 分支上。

    • 如果省略本地分支名,但是需要显示加上:符号,表示删除远程分支,也可以认为是将本地分支推送到远程指定分支,即删除分支。
    # git push origin :master
    // 等同于
    # git push origin --delete master
    

    上面命令表示删除远程 origin 主机上的 master 分支

    • 如果当前分支与远程分支之间存在追踪关系,则本地分支和远程分支都可以省略。
    # git push origin
    

    上面命令表示将本地分支推送到远程主机 origin 对应分支上,一般与本地分支同名

    • 如果当前分支只有一个追踪分支,那么主机名都可以省略。
    # git push
    
    • 如果当前分支和多个主机存在追踪关系,还想使用上面简洁的命令推送,可以使用-u添加默认主机
    # git push -u origin master
    // 之后就可以使用简洁命令推送
    # git push
    

    上面命令将本地分支推送到远程 master 分支,并且指定了默认主机为 origin,后面就可以不加任何参数使用git push了。

    • 以上命令默认都是推送当前分支,如果想一次推送本地所有分支到远程主机该怎么办?
    // 推送所有分支到远程origin主机
    # git push --all origin
    
    • --force 强制推送所有分支到远程主机
    // 强制推送本地分支到远程主机(你确定要这样做?)
    # git push --force origin 
    
    • 推送 tags 到远程主机
    # git push origin --tags
    

工作区和本地仓库

平时操作最多的就是工作区了,也就是我们的代码,每一次编码就是一次工作区的修改。其次就是本地仓库,将工作区代码提交到本地仓库作为一次提交,类似做了一次备份。

  1. 追踪相关

    • 添加追踪,记录自己关心的文件,以便git检测对该文件的任意操作,并记录下来
    # git add <file1> <file2>
    # git add <dir>
    
    • 一次添加当前文件夹下的所有文件
    // 添加所有文件到追踪文件列表中
    //ps: ignore列出文件除外
    # git add .
    
    • 发现些
  2. commit提交

回退与撤销

  1. git reset
  2. git revert
  3. git checkout
  4. git rm
  5. git stash

git rm --cached [file] == git reset [file]

保存登录账户

git config --local credential.helper store