Git 常用操作

Git 常用操作

远程仓库 操作命令

检出仓库: $ git clone git://github.com/origin_name/origin_name.git
查看远程仓库: $ git remote -v
添加远程仓库: $ git remote add origin_name remote_url
删除远程仓库: $ git remote rm origin_name
修改远程仓库: $ git remote set-url --push origin_name new_remote_url
拉取远程仓库: $ git pull remote_name local_name
推送远程仓库: $ git push remote_name local_name

分支 操作命令

查看本地分支: $ git branch
查看远程分支: $ git branch -r
创建本地分支: $ git branch name

注意新分支创建后不会自动切换为当前分支

切换分支: $ git checkout name
创建新分支并立即切换到新分支: $ git checkout -b name
删除分支: $ git branch -d name

-d选项只能删除已经参与了合并的分支, 对于未有合并的分支是无法删除的。
如果想强制删除一个分支, 可以使用-D选项

合并分支: $ git merge name

将名称为name的分支与当前分支合并

创建远程分支(本地分支push到远程): $ git push origin name
删除远程分支: $ git push origin :heads/name

我从master分支创建了一个own_br分支, 做了一些修改后, 使用git push origin master提交,
但是显示的结果却是Everything up-to-date, 发生问题的原因是git push origin master
在没有track远程分支的本地分支中默认提交的master分支, 因为master分支默认指向了origin master 分支,
这里要使用git push origin own_br:master 就可以把own_br推送到远程的master分支了。

如果想把本地的某个分支test提交到远程仓库, 并作为远程仓库的master分支,
或者作为另外一个名叫test的分支, 那么可以这么做。
$ git push origin test:master
提交本地test分支作为远程的master分支
好像只写这一句, 远程的github就会自动创建一个test分支

$ git push origin test:test
提交本地test分支作为远程的test分支

如果想删除远程的分支呢?类似于上面, 如果:左边的分支为空, 那么将删除:右边的远程的分支。

$ git push origin :test
刚提交到远程的test将被删除, 但是本地还会保存的, 不用担心

克隆远程指定分支

1git init
2git remote add -t br_name_local -f origin remote_origin_url
3git checkout br_name_local

Git 四种撤销操作

Git 4个区: 工作区, 暂存区, 本地仓库, 远程仓库
对应5个状态: 未修改, 已修改, 已暂存, 已提交, 已推送

干净工作区, 新建文件, 处于未跟踪untracked状态

  • 可以删除未跟踪文件, 还原工作区干净状态
  • 可以通过 git add filename 加入git暂存区

干净工作区, 修改文件, 处于已修改状态

  • 可以通过 git checkout -- filename, 撤销修改, 还原干净工作区
  • 可以通过 git add filename, 将修改加入git暂存区

所有通过 git add . 到暂存区的文件

  • 可以通过 git reset ., 撤销add,回复到原修改,新增状态

  • 可以通过 git reset filename, 撤销add,回复到原修改,新增状态

  • 可以通过 git reset HEAD ., 回复到原修改,新增状态

  • 同上的命令 git reset HEAD filename, 撤销暂存区的文件到原状态

  • 可以通过 git commit -m "commit info" , 提交暂存区文件到本地仓库

  • 可以通过 git reset --hard (.|filename), 撤销add操作和修改/新增操作,
    彻底还原干净工作区

上面的命令等于以下两条命令:
git reset (.|filename) 撤销提交到缓存区, 这样缓存区就干净了
git checkout -- (.|filename) 撤销文件的修改, 这样工作区就干净了

对于最后一次commit, 可以通过 git commit --amend 打开最后提交信息修改

对于提交到本地仓库的代码

  • 可以通过 git reset --hard HEAD^, 回退版本到上一个版本

  • 可以通过 git reset --hard 59b1707, 返回到指定的提交版本
    通过 git reflog 查看所有提交 版本信息

  • 回退版本后, 如果再次后悔, 通过git reflog, 找到指定版本id, git reset --hard xxxxx

  • 可以通过 git reset --hard origin/master, 利用远程的版本库,覆盖本地最后一次提交

  • 可以通过 git push origin master , 推送本地版本到远程仓库

如果提交到远程仓库后, 后悔了

  • 可以通过 git reset --hard HEAD^ , 回退本地版本库到上一个版本
    再运行 git push -f, 强制推送一次