Git常用命令合集

Csdn

stash

git stash //回滚到修改前并暂存修改内容 

git stash apply //从stash list中拿到应用stash中的内容,但是stash还会存在stash list中

git stash pop //从stash list中拿到应用stash中的内容,会从stash list中删除stash

git stash list // 显示所有的stash内容

git stash clear //清空stash list中所有stash

git stash drop stash@{0}  //这是删除第一个队列

多人协作的工作模式

  • 首先,可以试图用git push origin <branch-name>推送自己的修改;

  • 如果推送失败,则因为远程分支比你的本地更新,需要先用git pull试图合并;

  • 如果合并有冲突,则解决冲突,并在本地提交;

  • 没有冲突或者解决掉冲突后,再用git push origin <branch-name>推送就能成功!

  • 如果git pull提示no tracking information,则说明本地分支和远程分支的链接关系没有创建,用命令git branch --set-upstream-to <branch-name> origin/<branch-name>。

    这就是多人协作的工作模式,一旦熟悉了,就非常简单。

将本地工程push到远程

方式一:
  1. 建立本地仓库

     git init
    
  2. 创建远程仓库:在github或者gitlab创建远程仓库

  3. 让本地仓库和远程仓库进行关联

     git remote add origin git@mycode.skylettestudio.com:xlPay/XLPay.git
    
  4. 进行添加和提交操作

     git add .
     git commit -m"添加文件"
    
  5. push到远程

    git push -u origin master

由于远程库是空的,第一次推送master分支时,加上-u参数,Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令,如下:

    git push origin master
方式二:
  1. 创建远程仓库

  2. 把远程仓库clone到本地

     git clone. git@mycode.skylettestudio.com:xlPay/XLPay.git
    
  3. 将本地工程copy到clone的文件夹中

  4. 进行添加和提交操作

     git add -A
     git commit -m"添加文件"
    
  5. 将工程push到远程

     git push _ origin _ master
    

git clone 指定分支 拉代码

  1. git clone 不指定分支

     git clone  http://10.1.1.11/service/tmall-service.git
    
  2. git clone 指定分支

     git clone -b dev_jk http://10.1.1.11/service/tmall-service.git
    

    命令中:多了一个 -b dev-jk,这个dev_jk就是分支,http://10.1.1.11/service/tmall
    -service.git为源码的仓库地址


Add操作

  • 添加单个改动文件,如:readme.txt

    git add readme.txt

  • 添加所有改变的文件,有如下几种区别:

    //表示添加所有内容

    git add -A

    //表示添加新文件和编辑过的文件不包括删除的文件

    git add .

    //表示添加编辑或者删除的文件,不包括新添加的文件

    git add -u

  • 添加同时提交内容

    git commit -am"添加并提交到仓库"


分支操作

  • 查看分支

      git branch
    
  • 创建分支

      git branch <name>
    
  • 切换分支

      git checkout <name>
    
  • 创建+切换分支

      git checkout -b <name>
    
  • 合并某分支到当前分支

      git merge <name>
    
  • 删除本地分支

      git branch -d <name>
    
  • 查看远程分支列表

      git branch -a
    
      绿色代表当前项目所在的分支,红色就是远程分支列表
    
  • 提交该分支到远程仓库(即:在远程创建dev分支,并提交内容):

      git push origin dev
    
  • 从远程获取dev分支内容:

      git pull origin dev
    

    或者通过用命令行,运行 git fetch,可以将远程分支信息获取到本地,
    再运行 git checkout -b local-branchname origin/remote_branchname
    就可以将远程分支映射到本地命名为local-branchname 的一分支

  • 删除远程分支

      git push origin --delete <branchName>
    
  • 重命名本地分支

      git branch -m <oldbranch> <newbranch>
    
  • 重命名远程分支

      先删除远程分支,然后重命名本地分支,再重新提交一个远程分支
    

版本回退

在Git中,用HEAD表示当前版本。上一个版本就是HEAD,上上一个版本就是HEAD。,当然往上100个版本写100个比较容易数不过来,所以写成HEAD~100。

  • 查看提交日志(所有的提交日志,最近到最远)

      git log
    
  • 查看提交的内容(比如更改了哪些类,删除了哪些文件等)

      git log -p -1// -p 选项展开显示每次提交的内容差异,用 -2 则仅显示最近的两次更新
    
  • 查看命令历史(即:我们每一个命令)

      git reflog
    
  • 通过git log 或者 git reflog可以拿到每个版本的commit_id,然后通过切换版本/回退版本的命令即可:

      git reset --hard commit_id
    
  • 回到上一个版本

      git reset --hard HEAD^
    
  • 回退版本操作:

      //git log 拿到commit_id
      git log
      //回到commit_id那个版本
      git reset --hard commit_id
    
  • 已经回退到了之前的版本,又想回到新版本

      //查看所有的命令,然后找到新版本提交的 commit_id
      git reflog
      //去到新版本 
      git reset --hard commit_id
    
  • 让这个文件回到最近一次git commit或git add时的状态

      git checkout -- readme.txt
    

标签管理

  • 打一个新标签

      //默认标签是打在最新提交的commit上的
      git tag <name>
    
  • 查看所有标签(标签不是按时间顺序列出,而是按字母排序的)

      git tag
    
  • 查看某个标签信息

      //标签不是按时间顺序列出,而是按字母排序的
      git show <tagname>
    
  • 创建带有说明的标签,用-a指定标签名,-m指定说明文字

      git tag -a v0.1 -m "设置了标签啊" 3628164
    
  • 删除本地标签

      git tag -d v0.1
    
  • 推送一个本地标签到远程

      git push origin <tagname>
    
  • 推送全部未推送过的本地标签到远程

      git push origin --tags
    
  • 删除一个远程标签

      //先在本地进行删除
      git push origin :refs/tags/<tagname>
    
  • tag默认是打在最新的commit上的,如果想给已经commit过的内容添加标签如下:

      1. git reflog //找到历史版本的 commit id = 6224937
      2. git tag v1.0.0 6224937
    
  • 获取远程tag

      git fetch origin tag <tagname>
    

解决冲突

  • 合并冲突:

      //提交的文件如果出现冲突就会出现这种提示
      CONFLICT (content): Merge conflict in readme.txt
    
      Automatic merge failed; fix conflicts and then commit the result.
    
    1. 通过git status 查看冲突文件

    2. Git用<<<<<<<,=======,>>>>>>>标记出不同分支的内容

    3. 修改文件,保存,再次提交即可

    4. 通过git log查看分支合并的情况

    5. <<<<<<<标记冲突开始,后面跟的是当前分支中的内容。

      HEAD指向当前分支末梢的提交。

      =======之后,>>>>>>>之前是要merge过来的另一条分支上的代码。

      >>>>>>>之后的dev是该分支的名字。


更新本地工程

  • 获取远端库最新信息

    git fetch origin

  • 作比较

      git diff master origin/master
    
  • 合并本地仓库代码

      git merge origin/master
    
  • git pull 和 git pull --rebase 区别

    不错的图解


公共操作

  • 把本地git仓库恢复为普通文件夹

    1. 删除这个目录里的隐藏文件夹.git
    2. rm -rf .git/
  • 测试Github和Gitlab是否添加了SSH

      ssh -T git@github.com
      ssh -T git@gitlab.com
    
  • 查看未传送到远程代码库的提交描述/说明(commit到了本地仓库,但是没有push到远程仓库的内容的提交说明)

      git cherry -v origin thcdev//后面要加push到的远程仓库名
    
  • 查看远程库信息

      git remote -v;
    
  • 清屏操作

      git reset
    
  • git log之后退出

      按 Q 即可
    
  • 找到历史提交的commit id

      git log --pretty=oneline --abbrev-commit
    
  • 和远程仓库建立联系

    1. 创建SSH Key

      • 在用户主目录(这里在windows下是指 c/user/Administrator/.ssh/id_rsa)下,看看有没有.ssh目录。

      • 如果有,再看看这个目录下有没有id_rsa和id_rsa.pub这两个文件,如果已经有了,可直接跳到下一步。

      • 如果没有,打开Shell(Windows下打开Git Bash),创建SSH Key:

          $ ssh-keygen -t rsa -C "youremail@example.com"
        
      • 需要把邮件地址换成你自己的邮件地址,然后一路回车,使用默认值即可。

      • 由于这个Key也不是用于军事目的,所以也无需设置密码。

      • (测试的结果:C:\Users\Administrator.ssh 里面有id_rsa和id_rsa.pub两个文件,这两个就是SSH Key的秘钥对,id_rsa
        是私钥,不能泄露出去,id_rsa.pub是公钥,可以放心地告诉任何人。)

    2. 登陆GitHub,打开“Account settings”,“SSH Keys”页面:然后,点“Add SSH Key”,填上任意Title,在Key文本框里粘贴id_rsa.pub文件的内容。点“Add Key”,你就应该看到已经添加的Key:

      注意两点:

      • 为什么GitHub需要SSH Key呢?因为GitHub需要识别出你推送的提交确实是你推送的,而不是别人冒充的,而Git支持SSH协议,所以,GitHub只要知道了你的公钥,就可以确认只有你自己才能推送。

      • GitHub允许你添加多个Key。假定你有若干电脑,你一会儿在公司提交,一会儿在家里提交,只要把每台电脑的Key都添加到GitHub,就可以在每台电脑上往GitHub推送了。

    3. 测试SSH key是否添加成功

      输入如下命令进行测试

       ssh -T git@github.com
      

      如果出现:

      ssh_success.png

      说明添加成功了。


Git 命令行常用命令

  • 进入当前路径的dev

      cd dev
    
  • 返回上级目录

      cd ..
    
  • 返回上次目录

      cd
    
  • 查看当前目录

      pwd
    
  • 列出当前目录内容

      ls    
    
  • 新建一个名为dev的目录

      mkdir dev
    
  • 强制删除,不管目录为不为空

      rm -rf dev    
    
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,463评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,868评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,213评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,666评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,759评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,725评论 1 294
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,716评论 3 415
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,484评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,928评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,233评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,393评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,073评论 5 340
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,718评论 3 324
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,308评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,538评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,338评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,260评论 2 352

推荐阅读更多精彩内容