git开发常用命令

git常用命令:

  • git init //初始化本地git环境
  • git clone XXX//克隆一份代码到本地仓库
  • git pull //把远程库的代码更新到工作台
  • git pull --rebase origin master //强制把远程库的代码跟新到当前分支上面
  • git fetch //把远程库的代码更新到本地库
  • git add . //把本地的修改加到stage中
  • git commit -m 'comments here' //把stage中的修改提交到本地库
  • git push //把本地库的修改提交到远程库中
  • git branch -r/-a //查看远程分支/全部分支
  • git checkout master/branch //切换到某个分支
  • git checkout -b test //新建test分支
  • git checkout -d test //删除test分支
  • git checkout -b 分支 origin/分支  //从远程origin获取分支到本地
  • git checkout -b 分支 upstream/分支  //从远程upstream获取分支到本地
  • git checkout --patch 分支 fileName  //获取本地分支上(或者远程的分支)的文件补丁到该分支,如果有不同会让确认是否接收这个不同
  • git merge master //假设当前在test分支上面,把master分支上的修改同步到test分支上
  • git merge tool //调用merge工具
  • git stash //把未完成的修改缓存到栈容器中
  • git stash list //查看所有的缓存
  • git stash pop //恢复本地分支到缓存状态
  • git blame someFile //查看某个文件的每一行的修改记录()谁在什么时候修改的)
  • git status //查看当前分支有哪些修改
  • git log //查看当前分支上面的日志信息
  • git diff //查看当前没有add的内容
  • git diff --cache //查看已经add但是没有commit的内容
  • git diff HEAD //上面两个内容的合并
  • git reset --hard HEAD //撤销本地修改
  • echo $HOME //查看git config的HOME路径
  • export $HOME=/c/gitconfig //配置git config的HOME路径
  • git remote add upstream url //添加上游远程主干仓库
  • git fetch upstream //从上游获取代码
  • git merge upstream/master或者其他分支  这里写某个分支名称    //合并上游某个分支和本地的代码

团队协作git操作流程:

  • 克隆一个全新的项目,完成新功能并且提交:
    1. git clone XXX //克隆代码库
    2. git checkout -b test //新建分支
      1. modify some files //完成修改
    3. git add . //把修改加入stage中
    4. git commit -m '' //提交修改到test分支
      1. review代码
    5. git checkout master //切换到master分支
    6. git pull //更新代码
    7. git checkout test //切换到test分支
    8. git meger master //把master分支的代码merge到test分支
    9. git push origin 分支名//把test分支的代码push到远程库
  • 目前正在test分支上面开发某个功能,但是没有完成。突然一个紧急的bug需要处理
    1. git add .
    2. git stash
    3. git checkout bugFixBranch
    4. git pull --rebase origin master
      1. fix the bug
    5. git add .
    6. git commit -m ''
    7. git push
    8. git checkout test
    9. git stash pop
      1. continue new feature's development 

git撤回提交:

  • git 撤回 本地 add/commit:
    1.  放弃本地更改,未add,未commit

       git checkout filename

      注:与git checkout branch 区别

    2. 已add未commit的更改

      git reset HEAD filename               ---------------只是撤销add 操作,本地修改不会丢失

    3. 已经commit的的撤回
      1.   git reset commit_id (回退到上一个 提交的节点 代码还是原来自己修改的)
      2. 或者是git reset --soft HEAD^  (回退到上一个 提交的节点 代码还是原来自己修改的)
    4. 放弃已经commit的修改(--hard 都是强制修改)

      git reset --hard HEAD^                  ----------------回到上次commit的状态

      git reset --hard HEAD^^                ------------------回到前两次提交

      git reset --hard commitid          ---- (回退到上一个commit节点, 代码也发生了改变,变成上一次的,本次的修改也丢了)

    5. 放弃已经push的修改

         1>git reset HEAD                     --------------------只是把HEAD指针向后移动

          2>git revert commitID             --------------------提交一个新的版本,将之前的版本覆盖当前的版本,版本会递增,不影响想要放弃的已push的修改,而revert之后的版本递增,但是push的内容还在,只是存在于上一个版本

      git reflog -------------查看commit日志

      git reset --hard commitid        ---------------回到commitid

    6.   git revert 用法

      git revert 撤销 某次操作,此次操作之前和之后的commit和history都会保留,并且把这次撤销
      作为一次最新的提交

          * git revert HEAD                  撤销前一次 commit
          * git revert HEAD^               撤销前前一次 commit
          * git revert commit (比如:fa042ce57ebbe5bb9c8db709f719cec2c58ee7ff)撤销指定的版本,撤销也会作为一次提交进行保存。
      git revert是提交一个新的版本,将需要revert的版本的内容再反向修改回去,
      版本会递增,不影响之前提交的内容

      --------------------------------------------------------------------------------------------------------------------------------------------

      git revert 和 git reset的区别 
      1. git revert是用一次新的commit来回滚之前的commit,git reset是直接删除指定的commit。 
      2. 在回滚这一操作上看,效果差不多。但是在日后继续merge以前的老版本时有区别。因为git revert是用一次逆向的commit“中和”之前的提交,因此日后合并老的branch时,导致这部分改变不会再次出现,但是git reset是之间把某些commit在某个branch上删除,因而和老的branch再次merge时,这些被回滚的commit应该还会被引入。 
      3. git reset 是把HEAD向后移动了一下,而git revert是HEAD继续前进,只是新的commit的内容和要revert的内容正好相反,能够抵消要被revert的内容。

git 撤回远程origin的push

1.撤销提交信息

首先,通过git log查看提交信息,以便获取需要回退至的版本号:

$ git log
commit a44822002522f2ab1e3a5e2a1cec00a7d3d02185 (HEAD -> master, origin/master, origin/HEAD)
Author: hanchao5272 <[email protected]>
Date:   Sun Mar 4 11:14:55 2018 +0800

    CSDN-java反射06-成员变量Field-代码优化

commit aa909cff2239536df14820fe086d96305b24e9f1
Author: hanchao5272 <[email protected]>
Date:   Sat Mar 3 23:43:03 2018 +0800

    CSDN-java反射-修饰符-代码优化

我们需要撤销CSDN-java反射06-成员变量Field-代码优化这次提交,所以需要回退至的版本是CSDN-java反射-修饰符-代码优化,即需要回退至的版本号是:aa909cff2239536df14820fe086d96305b24e9f1。

然后,通过git reset –soft <版本号>重置至指定版本的提交,达到撤销提交的目的:

$ git reset --soft aa909cff2239536df14820fe086d96305b24e9f1

参数soft指的是:保留当前工作区,以便重新提交 
还可以选择参数hard,会撤销相应工作区的修改,一定要谨慎使用


然后,通过git log确认是否成功撤销:

$ git log
commit aa909cff2239536df14820fe086d96305b24e9f1 (HEAD -> master)
Author: hanchao5272 <[email protected]>
Date:   Sat Mar 3 23:43:03 2018 +0800

    CSDN-java反射-修饰符-代码优化

已经成功撤销。

2.撤销

通过git push origin master –force强制提交当前版本号,以达到撤销版本号的目的:

$ git push origin  master --force
Total 0 (delta 0), reused 0 (delta 0)
To github.com:hanchao5272/myreflect.git
 + a448220...aa909cf master -> master (forced update)

 必须添加参数force进行强制提交,否则会提交失败,并报错:

$ git push origin master
To github.com:hanchao5272/myreflect.git
 ! [rejected]        master -> master (non-fast-forward)
error: failed to push some refs to '[email protected]:hanchao5272/myreflect.git'
hint: Updates were rejected because the tip of your current branch is behind
hint: its remote counterpart. Integrate the remote changes (e.g.
hint: 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.

报错原因:本地项目版本号低于远端仓库版本号

3.修改代码,重新提交和推送

//修改代码,添加修改
git add .
//重新提交
git commit -m "CSDN-java反射06-成员变量Field-代码优化"
//重新推送
git push origin master
发布了83 篇原创文章 · 获赞 50 · 访问量 7万+

猜你喜欢

转载自blog.csdn.net/qq_37636695/article/details/88874361