博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
git 常用命令
阅读量:4322 次
发布时间:2019-06-06

本文共 5267 字,大约阅读时间需要 17 分钟。

git学习

参考链接:

版本回退:

  • git reset --hard HEAD^20
    • HEAD之前20个版本
    • --hard 撤消commit与对应的更改
    • --soft 撤消commit
  • git reflog
    • 查看操作历史记录

(stage or index):

  • git add
    • 将"文件修改"添加到暂存区
  • git commit
    • 将暂存区所有内容提交(移动?)到当前分支
  • git diff HEAD -- a.txt
  • git checkout -- a.txt
    • 将a.txt文件在__"工作区"__的修改全部撤销
    • 撤销到和 版本库(修改没被放到暂存区)/暂存区(修改已经添加到暂存区) 一样的状态
    • 让a.txt回到最近一次git commit/ git add时的状态(会丢失最近一次提交后修改的内容)
    • 命令中的"--"
  • git reset HEAD a.txt
    • 将__"暂存区"__的修改撤销掉(unstage)
    • HEAD 撤销到最新版本
  • 引用原作一段话
场景1:当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令git checkout -- file场景2:当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步,第一步用命令git reset HEAD 
,就回到了场景1,第二步按场景1操作场景3:已经提交了不合适的修改到版本库时,想要撤销本次提交,参考版本回退一节,不过前提是没有推送到远程库

删除:

  • rm a.txt
    • git rm a.txt (+ git commit)从版本库中删除该文件
    • git checkout -- a.txt 恢复误删的a.txt (把误删的文件恢复到最新版本)
    • git checkout 用__版本库__里的版本替换__工作区__的版本

远程仓库

  • 本地Git仓库和github仓库之间的传输是通过SSH加密的
    • ssh-keygen -t rsa -C "xxx@yyy.com
  • 新建仓库+推送
    • git remote add origin git@github.com:yourname/XXX.git
    • 远程库的名字为origin
    • git push -u origin master 第一次推送master分支的所有内容
    • git push origin master
  • 新建仓库+克隆
    • git clone git@github.com:yourname/XXX.git

  • 概念
    • HEAD -> master -> 提交
    • 每次提交 master 分支都向前移动一步
  • 分支操作命令
    • git checkout -b dev
    • git checkout master; git merge dev
    • git merge 合并指定分支到当前分支
    • Fast-forward模式 当删除被合并的分支后,git log中丢掉__是从这个分支合并__的信息
    • 禁用--no-ff 禁用后 Git会在merge时生成一个新的commit
    • 普通模式合并,能看出来曾经做过合并,git log 中有merge分支的信息
    • git branch -d dev
  • 带参数的git log
    • git log --graph --pretty=oneline --abbrev-commit
    • git log --graph
  • stash
    • 把当前工作现场“储藏”起来,等以后恢复现场后继续工作
    • 从某个分支退出,但不想commit时:
    dev分支 git stashgit checkout masterdo some thinggit checout devgit stash listgit stash pop或者 git stash applay xxx / git stash drop xxx
  • 删除未被合并的分支
    • git branch -D XXXX
  • 推送/抓取分支
    • git push origin dev
    • 拉取远程dev分支并创建本地dev分支 git checkout -b dev orgin/dev
    • git branch --set-upstream-to=origin/dev dev
    • git pull ( git pull origin dev )

标签

  • 概念
    • 标签是指向某个commit的指针
    • git show
    • git tag -a / -d
    • 删除远程标签,先从本地删除,然后 git push origin :refs/tags/

自定义git

  • Git显示颜色
    • git config --global color.ui true
  • 忽略某些文件
    • :https://github.com/github/gitignore
git config --global alias.st status     git config --global alias.co checkout    git config --global alias.ci commit    git config --global alias.br branch
  • 配置文件
$ cat .git/config     [core]    repositoryformatversion = 0    filemode = true    bare = false    logallrefupdates = true    ignorecase = true    precomposeunicode = true    [remote "origin"]    url = git@github.com:michaelliao/learngit.git    fetch = +refs/heads/*:refs/remotes/origin/*    [branch "master"]    remote = origin    merge = refs/heads/master    [alias]    last = log -1

git fetch / pull 区别

  • 参考文献
    • :https://www.cnblogs.com/yehui-mmd/p/6953383.html
    • :https://blog.csdn.net/riddle1981/article/details/74938111
    • :http://www.ruanyifeng.com/blog/2014/06/git_remote.html
  • 区别在于取回更新后是否自动合并
  • 概念
    • tracking (分支)追踪关系
    • git branch --set-upstream master origin/erp01
    • 指定master分支追踪origin/erp01
  • git pull <远程分支名>:<本地分支名>
    • git pull origin erp01:master
    • 取回origin主机的erp01分支与本地的master分支合并
  • git push <本地分支名>:<远程分支名>
    • git pull origin erp01:master
    • 取回origin主机的erp01分支与本地的master分支合并

git常用命令

  • 更新代码
    • git fetch --all ()
    • git push origin remotes/upstream/master:master -f
      • 将fetch下来的remotes/upstream/master分支push到origin远程仓库master分支上,省略了merge的commit
      • git branch -va查看fetch后的结果
    • git reset --hard HEAD~20
    • git checkout master
    • git pull (将最新代码拉取到本地)
  • 需要保存未提交的内容
    • git format-patch -
  • git commit --amend --no-edit
  • 还原某个特定文件到某个版本
    • git checkout commit-id xxx.cpp

git相关工具

  • tig

配置git使用https方式操作

  • 配置避免每次都输入username / passwd
  • 参考
git config --global user.name "username"git config --global user.email "useremail"git config --global http.sslverify "false"vi ~/.git-credentials #添加https://username:passwd@addr.com<:port>git config --global credential.helper store

配置gitlab中的SSH key

  • cd ~; ssh-keygen -t rsa -C "your_email@youremail.com"
  • cat /Users/admin/.ssh/id_rsa.pub
  • 将公钥粘贴到gitlab-setting-SSH keys中
  • 但git clone git@.....git发生错误(可能由于服务器未开放22端口)
tmp $git clone git@XXX.com:WWW/YYY.gitCloning into 'YYY'...ssh: connect to host XXX port 22: Operation timed outfatal: Could not read from remote repository.Please make sure you have the correct access rightsand the repository exists.
  • 添加如下配置
tmp $cat ~/.ssh/configHost gitlab    Hostname XXX    Port 8021    User git
tmp $cat /etc/hosts### Host Database## localhost is used to configure the loopback interface# when the system is booting.  Do not change this entry.##127.0.0.1   localhost255.255.255.255 broadcasthost::1             localhost10.120.16.22    XXX10.120.16.22    gitlab

合并多次push的commit

  • git rebase -i HEAD~3
  • git status
  • git push origin master -f
  • git status pop

提交a分支到远程的b分支

  • git push origin b:a
  • 参考

对比不同版本之间代码

  • git reflog
  • git diff old_commit_id new_commit_id

修改未push的commit

  • git commit --amend

将在master分支修改的内容切换到refactor分支

  • git stash
  • git checkout refactor
  • git stash pop, 这一步会发生冲突,产生需要解决冲突的文件,但此时并没有执行git stash drop,所以可以执行如下步骤
  • git checkout master -f
  • git pop,此时恢复到了最初的在master上完成开发的状态
  • git stash
  • git pull origin master
  • git checkout refactor
  • git merge master
  • git stash pop

取消git add的文件

  • git reset HEAD a.cpp
  • git reset HEAD . 取消所有add的文件

分支A已经merge到master,之后因其他需求git revert这个merge,然后master有若干merge其他分支操作,然后需要再次将A分支(最开始要merge的内容或者还有新内容都)merge到master

  • 首先最后一步的merge request中只包含新内容,丢失了分支A最开始要merge的内容
  • 这种情况下需要在master分支执行 git revert ,这时A分支最开始要merge的内容已经回来了,然后执行git push origin master,再将A分支的新内容提merge request
  • git revert -m 1 参考

待补充

转载于:https://www.cnblogs.com/wangzhiyi/p/9164920.html

你可能感兴趣的文章
洛谷 CF937A Olympiad
查看>>
Codeforces Round #445 C. Petya and Catacombs【思维/题意】
查看>>
用MATLAB同时作多幅图
查看>>
python中map的排序以及取出map中取最大最小值
查看>>
ROR 第一章 从零到部署--第一个程序
查看>>
<form>标签
查看>>
vue去掉地址栏# 方法
查看>>
Lambda03 方法引用、类型判断、变量引用
查看>>
was集群下基于接口分布式架构和开发经验谈
查看>>
MySQL学习——MySQL数据库概述与基础
查看>>
ES索引模板
查看>>
HDU2112 HDU Today 最短路+字符串哈希
查看>>
JPanel重绘
查看>>
图片放大器——wpf
查看>>
SCALA STEP BY STEP
查看>>
cocos2d-x学习笔记
查看>>
MySql中的变量定义
查看>>
Ruby数组的操作
查看>>
hdu1181暴搜
查看>>
解码字符串 Decode String
查看>>