git常用指令

零、常用命令

创建删除分支操作:
git branch -D 分支名:删除本地分支
git push origin --delete 分支名:删除远程分支
git checkout -b 新分支名  origin/master  : 基于远程master创建新本地分支
git push --set-upstream origin 远程分支名:第一次push时,要关联一个远程的分支

清空改动代码:
git checkout -- 文件名
清空add的定:
git restore --staged 文件名
清空commit代码:
git reset --hard commitId
删除 untracked files:
git clean -f

回滚错误的代码至远程服务器:
git revert commitId--->git push

修改上一次commit(不会产生新的commitId,但上次的commitID会发生变化):
git commit --amend -m 'recommit'

删除中间某次提交:https://www.cnblogs.com/qiqi715/p/11540999.html

stash操作:
git stash save ""
git stash list
git stash pop

merger操作:
--ff,--no-ff(默认:产生新提交),--ff-only(不产生新提交)
sunxuejian-dev分支merge到master:
1、切到master
2、git pull
3、git merge --squash origin/sunxuejian-dev(让commit变得优雅)
4、git status
5、git log
6、git commit
7、git push
8、git log 

rebase操作:
dev分支:git rebase origin/master(变基)--->【遇到冲突--->解决冲突--->git add--->git rebase --continuer】(循环)--->git rebase完毕--->git status--->git push
master分支:git merge origin/dev--->git push

初始化工程
git init
git remote add origin git地址
git add .
git commit -m '说明'
git push --set-upstream origin master
或gitee初始化
1、git clone https://gitee.com/sunxj1222/springCloud-config-study.git   ====>用户名  密码
2、git pull
   git status:Untracked files
3、git add application.yml
   git status:Changes to be committed:
4、git commit -m "application.yml"
   git status:Your branch is based on 'origin/master', but the upstream is gone.
                                     或(use "git push" to publish your local commits)
5、git push -u origin master
  git status:Your branch is up-to-date with 'origin/master'.
  如果报没有权限,则执行:git config --system --unset credential.helper
6、删除文件 rm--->git add -A--->commit--->push
注:git add多个文件
1、多个文件,文件之间以空格隔开:git add file1 file2 file3
2、git add .                        提交被修改的和新建的文件,但不包括被删除的文件                           
3、git add -u     --update          update tracked files    更新所有改变的文件,即提交所有变化的文件
4、git add -A     --all              add changes from all tracked and untracked files   提交已被修改和已被删除文件,和新的文件

更新远程分支列表
git remote update origin --prune

feat: 新功能. (必要的时候请加上 scope: 例如 feat(services): 更新了 XXX )
fix: 修补bug
docs: 文档(documentation)
style: 格式(不影响代码运行的变动)
refactor: 重构(即不是新增功能,也不是修改bug的代码变动)
test: 增加测试
chore: 构建过程或辅助工具的变动

 

快捷键设置:git log  ---->git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"

 

一、学习

1、git init test  --->初始化一个git仓库,会有.git文件夹生成

2、git status --->用于显示工作目录和暂存区的状态,不显示已经commit的信息

      Untracked files--->从来没add的文件

      Changes to be committed--->已经在stage区,没有commit的文件

      Changes not staged for commit---->有修改,还没有加到stage区

      Unmerged paths---->merge时冲突的文件,文件内容如下:

             $ cat aa.txt
                <<<<<<< HEAD
                version1_master
                =======
                version_sunxj1
                >>>>>>> sunxj1

3、git cat-file -p hashid--->hashid对应文件存放的内容

      blog--->文件的具体内容

      tree--->存放blog

      commit---->存放parent(上一次的commit)、tree

4、git hash-object 文件名--->计算该文件的hashid

5、git log--->提交历史

6、git branch -a --->显示所有分支

      git branch test1.1--->建立本地分支

      git  branch -D test1.1--->删除本地分支

      git push orign master: test1.1---->建立远程分支

      git push orign :test1.1--->删除远程分支

      git checkout test1.1---->进入分支

      git checkout head---->退出分支

7、git ls-files --stage---> 查看暂存区内容

8、git stash save “stash0” ---->将工作区的活index中的暂存到stash0中

      git stash pop--->将缓存堆栈中的第一个stash删除,并将对应修改应用到当前的工作目录下

      git  stash apply---->将缓存堆栈中的stash多次应用到工作目录中,但并不删除stash拷贝

      git stash list---->查看现有stash

      git stash drop  stash的名字---->移除指定的stash

      git stash show stash的名字---->查看指定stash的diff,后面添加-p--patch可以查看特定stash的全部diff

                                                          --index经暂存的文件重新被暂存

9、git merge test1.1 ---->将当前test1.1分支中的内容合并到当前分支

10、git reset  --soft / mixed /hard---->取消提交用到

11、git amend prievious commit ---->修改最后一次提交的内容

12、merge冲突(master|MERGE)、cherry-pick冲突(master|CHERRY-PICKING)、stash pop冲突(master) 。状态如下:

$ git status
On branch master
You are currently cherry-picking commit 633c4fc.
  (fix conflicts and run "git cherry-pick --continue")
  (use "git cherry-pick --abort" to cancel the cherry-pick operation)

Unmerged paths:
  (use "git add <file>..." to mark resolution)

        both modified:   aa.txt

no changes added to commit (use "git add" and/or "git commit -a")

 

$ cat aa.txt
<<<<<<< HEAD(当前分支最新提交的节点)
22                           我本地的内容
=======
dd                           远程分支的内容
>>>>>>> master(master分支)

解决:查看aa.txt  ,将要保存的内容add、commit

13、rebase特点

注:

1、当前分支 merge/rebase 分支1--------->将当前分支中的代码做变更,并commit。分支1中的代码不受影响。之后再push就ok了

2、merge/rebase遇到冲突时,对于每个冲突文件进行:vim 编辑文件(内容如上)---> add ---> commit --->push

3、当前分支 git checkout 分支名1 文件名--->将分支1上的文件拉到本地

4、git stash 不针对于哪个分支,是对本地未commit 代码的一个存储,,无论切换到哪个分支上,git stash list都在。。

      使用场景:a分支要切换到b分支,但a分支有未add且不想add的代码,这时就要将这部分代码stash存储,否则checkout不到b分支,常用命令:git stash save '名字'、git  stash pop  (可选:stash@{0})、git stash show、git stash list

      注:git stash可以存储未add、已add未commit的代码;不可存储未Untracked files的代码

      注:git stash save后,会将workspace中的内容缓存起来,并用版本库内容(commit后的内容)替换workspace中的内容

5、git checkout -b 新分支名  :默认基于当前本地分支创建新本地分支

      git checkout -b 新分支名  orign/master  : 基于远程master创建新本地分支

      git push --set-upstream origin 远程分支名第一次push时,要关联一个远程的分支,并会在.git目录下生成config文件,        如:

      [branch "本地分支名"]
            remote = origin
            merge = refs/heads/远程分支名

     git push origin master:refs/for/master ,即是将本地的master分支推送到远程主机origin上的对应master分支, origin 是       远程主机名,第一个master是本地分支名,第二个master是远程分支名

      git push origin f2:f3  :基于本地的f2分支在远程创建f3分支

      git push origin :f3删除远程的f3分支

      git push origin --delete 分支名:删除远程分支

      git branch -D 分支名:删除本地分支

      git push origin 本地分支名:将本地分支提交到远程

      git branch :查看本地分支

      git branch -r :查看远程分支

      git branch -a :查看远程+本地分支

 

常用:

修改了工作区内容,还没add:git checkout -- 文件名   或   git restore 文件名

修改了工作区内容,并add了:git reset HEAD 文件名   或  git restore --staged 文件名

修改了工作区内容,并add、commit了:git reset --hard 版本号(commitId,因为git是分布式版本控制系统)

回退到当前版本:git reset --hard HEAD(当处于merging状态时可以用)

清除Untracked files的文件:git clean -f -d

将多个commitId压缩成一个:git merge --squash origin/dev(让commit变得优雅)

merge模式命令优点缺点
fast-forward(默认)git merge dev --ff不会创造一个新的commitId节点不知道是从哪个分支过来的
no-fast-forwardgit merge dev --no-ff 知道是从哪个分支过来的会创造一个新的commitId节点

 

6、用 git add 错误的提交了某个文件,就用git reset HEAD 文件名 来取消git add   (注:未add是红色,add未commit是绿色)

 

 

二、常见场景

1、在A分支上做git pull,B分支也会检测到本地和远程的不同

分支master、A(本地id:1,远程id:2)

master: git pull

    提示:A---->origin/A       表示本地A分支和远程A分支存在差异了

master:git checkout A

    提示:your branch is behind origin/A by 1 commit     表示本地A分支落后远程A分支一个commit

A:git pull

    提示:拉去代码的信息

如图:

2、一般都是在自己的分支上,commit之后push之前执行:git rebase origin/master

 

三、记一次git rebase

1、背景:在dev分支上开发,合并到master

2、操作:切到dev分支--->git rebase master--->遇到冲突--->解决冲突--->git add--->git rebase --continuer--->遇到冲突--->解决冲突--->git add--->git rebase --continue--->git rebase完毕--->git status(Your branch and 'origin/dev' have diverged,and have 91 and 21 different commits each, respectively.)---> git lg(之前在dev分支上提交的commitId=a,现在commitId=a')--->git pull--->遇到冲突--->git reset --hard(没有参数时,默认为HEAD指向的commitId)--->git push -f--->切到master分支--->git merge dev--->git push

注:rebase与merge的区别

a、rebase时,冲突一个一个提现,遇到冲突会停止,解决后git rebase --continue;merge后,所有冲突一块提现。

b、rebase后,之前在当前分支提交的commitId=a,变为了commitId=a';merge后,会多出一个合并的commitId=b。

 dev分支:此时dev分支:rebase master后 dev分支:pull --rebase后dev分支:push后master分支:此时master分支:merge dev后master分支:push后
本地commitId 9d1cf017b9c1f09d1cf019d1cf01git8a3f9cda80bbe6a80bbe6
远程commitId9d1cf019d1cf019d1cf019d1cf018a3f9cd8a3f9cda80bbe6


 

 

 

  四、记一次pull失败(分支对不上)

      $ git pull
error: cannot lock ref 'refs/remotes/origin/guanshujun': 'refs/remotes/origin/guanshujun/fb-3' exists; cannot create 'refs/remotes/origin/guanshujun'
From https://coding.jd.com/app/forcebot2.0
 ! [new branch]          guanshujun -> origin/guanshujun  (unable to update local ref)

$ git remote update origin --prune
Fetching origin
From https://coding.jd.com/app/forcebot2.0
 - [deleted]             (none)     -> origin/guanshujun/fb-3
 * [new branch]          guanshujun -> origin/guanshujun

说明:Git更新远程分支列表

 

      

 

 

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值