Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

git cmd line for work #1

Open
thinkingc opened this issue Apr 26, 2020 · 0 comments
Open

git cmd line for work #1

thinkingc opened this issue Apr 26, 2020 · 0 comments
Labels
blog knowledge summary

Comments

@thinkingc
Copy link
Owner

HEAD、master 与 branch
[Git从入门到熟练使用](https://www.jianshu.com/p/e1a981eec3d3)
Git教程

PR:https://blog.csdn.net/qq_33429968/article/details/62219783

进master流程

在fb之外的分支:git fetch origin fb:fb
git checkout fb
git rebase -i xxx
git push my fb:fb -f

git fetch origin master:master (此时source branch 对应的target branch应该是0个Commits)
git checkout master
git cherry-pick commitid(rebase后仅剩的一个commitid)
git add .; git cherry-pick --continue (conflict时)
git push my master

git checkout -b 本地分支名x origin/远程分支名x
使用该方式会在本地新建分支x,并自动切换到该本地分支x。
采用此种方法建立的本地分支会和远程分支建立映射关系。
如果不想建立映射关系,可以:
git fetch origin 远程分支名x:本地分支名x
使用该方式会在本地新建分支x,但是不会自动切换到该本地分支x,需要手动checkout。
新建文件必须git add .

Git提交格式

  1. git commit -a -m "改了什么" -m "Fixes ZSTAC-xxx" // bug号 git commit -a -m "add condition statement" -m "Fixes ZSTAC-23128"
  2. git push -f my master-bug-ZSTAC-01(新建分支推送常用
  3. commit url 要贴到bug里面,pr进了之后要及时把bug给标记为resolved
  4. 解决方案写到bug备注里
  5. pr 时title简单描述改了啥

合并到origin master时,有冲突

在 Git 中整合来自不同分支的修改主要有两种方法:merge 以及 rebase。(即解决冲突)

  1. git pull -r origin master 拉取冲突
  2. vscode中处理冲突
  3. git add . && git rebase --continue
  4. git push -f my master-bug-ZSTAC-32999

同时提交3.7.0分支

先建个masterd bug的分支,解决好提交后...

  1. git checkout 3.7.0
  2. git pull origin 3.7.0
  3. git checkout -b 3.7.0-bug-ZSTAC-01010
    [git fetch origin 3.7.0:本地分支名x] git checkout ... // 可以省略上面3步
  4. git cherry-pick [push到master的commitid]
  5. git push my

bug二次修改(merge之后)

  1. git pull -r origin master
  2. 改好之后
  3. git commit -a -m "改了什么" -m "Fixes ZSTAC-xxx"
  4. git push -f my

(1.)如果有冲突, 解决冲突
git add .
不需要commit
git rebase --continue
git push 到远端

合并多次commit为一次: https://blog.csdn.net/u013276277/article/details/82470177

git rebase:处理我们的commit信息(合并某几次、修改某一次):https://blog.csdn.net/tangkegagalikaiwu/article/details/8542827/

  1. git log
  2. git rebase -i [HEAD~3]f0dad2872cb83caf078da9bcea0e51c11c92e694(要合并的之前的commitid)
  3. vi(修改commit信息)
  4. git push -f my master-bug-ZSTAC-23128
    ~重新pr

git rebase(变基)

git rebase:git rebase 可以帮助项目中的commit提交历史干净整洁!!!
git rebase -i HEAD~4 // 修改第2-4行的第一个单词pick为squash

git reset(重置)

git reset:重置stage区和工作目录。https://www.jianshu.com/p/c2ec5f06cf1a
git reset --hard commitid // 回退到指定版本
git reset --hard HEAD~2 // 回退2个版本 (HEAD:当前 commit 的引用)
git reset --hard origin/master // 放弃所有修改(commit),完全同步远程仓库

解决冲突:
git add .
git rebase --continue

强制拉取不合并

git fetch –all //只是下载代码到本地,不进行合并操作 - $ git fetch <远程主机名> <分支名> //注意之间有空格
git reset –hard origin/master //把HEAD指向最新下载的版本

// 类似上面
git fetch origin master //从远程主机的master分支拉取最新内容
git merge FETCH_HEAD //将拉取下来的最新内容合并到当前所在的分支中

git push/pull 冲突原因

https://juejin.im/post/5d3685146fb9a07ed064f11b
很明显此时远程分支有新的 commit 未同步到本地,无法推送

git stash(储藏):没开发完,又不想增加commit log时 https://www.cnblogs.com/zndxall/archive/2018/09/04/9586088.html

  • git stash [save "save message"] : 执行存储时,添加备注,方便查找,只有git stash 也是可以的,但查找时不方便识别
  • git stash list :查看stash了哪些存储
  • git stash apply :应用某个存储,但不会把存储从存储列表中删除,默认使用第一个存储,即stash@{0},如果要使用其他个,git stash apply stash@{$num} , 比如第二个:git stash apply stash@{1}
  • git stash pop :命令恢复之前缓存的工作目录,将缓存堆栈中的对应stash删除,并将对应修改应用到当前的工作目录下,默认为第一个stash,即stash@{0},如果要应用并删除其他stash,命令:git stash pop stash@{$num} ,比如应用并删除第二个:git stash pop stash@{1}
  • git stash save -u "messeag":包含未被跟踪的文件
  • git stash drop stash@{$num} :丢弃stash@{$num}存储,从列表中删除这个存储
  • git stash clear :删除所有缓存的stash
  • git stash show :显示做了哪些改动,默认show第一个存储,如果要显示其他存贮,后面加stash@{$num},比如第二个 git stash show stash@{1}
  • git stash show -p : 显示第一个存储的改动,如果想显示其他存存储,命令:git stash show stash@{$num} -p ,比如第二个:git stash show stash@{1} -p

基本命令

  • 查看远程仓库:git remote -v 比如:origin、my...
  • 添加远程仓库:git remote add my[分支名] ssh://git@dev.zstack.io:9022/wenhao.chen/mevoco-ui2.git[分支的ssh]
  • 切换分支:git checkout master 完事记得拉取 git pull origin master
  • 拉取最新代码:$ git pull <远程主机名> <远程分支名>:<本地分支名> 如果远程分支是与当前分支合并,则冒号后面的部分可以省略
    git pull origin master
  • 推送到相应分支:git push <远程主机名> <本地分支名>:<远程分支名> https://www.cnblogs.com/qianqiannian/p/6008140.html
    git push my master-bug-ZSTAC-01(新建分支推送常用): 如果远程分支被省略,如上则表示将本地分支推送到与之存在追踪关系的远程分支(通常两者同名)。如果该远程分支不存在,则会被新建。
    git push origin: 如果当前分支与远程分支存在追踪关系,则本地分支和远程分支都可以省略,将当前分支推送到origin主机的对应分支

查看提交记录:

git log [--pretty=oneline]
git log --oneline -3
git log -p // 查看具体文件提交历史
git reflog 可以查看所有分支的所有操作记录(包括已经被删除的 commit 记录和 reset 的操作)

  • 查看提交记录:git show id[log编号]
  • 查看配置:vim .git/config
  • 擦去(替换)上一次的commit信息:git add . && git commit --amend --no-edit。如果要修改上一条的message,那么去掉--no-edit选项即可,git commit --amend -m "xxxx"
  • 查看追踪关系:$ git branch -vv
  • 后悔 git pull/push:git reset --hard HEAD
  • 追踪改动记录:git blame -L 100,+20 src/windows/main.vue

git cherry-pick(挑拣)

git cherry-pick commitid

git中一些选项解释:

-d:--delete:删除
-D:--delete --force的快捷键
-f:--force:强制
-m:--move:移动或重命名
-M:--move --force的快捷键
-r:--remote:远程
-a:--all:所有
-u: --update: 只会标记本地有改动(包括删除和修改)的已经追踪的文件

git删除本地分支和远程分支

  1. 查看本地分支:git branch
  2. 删除本地分支:git branch -d[D] dev
  3. 查看远程分支:git brand -a
  4. 删除远程分支:git push origin --delete dev

拉取远程分支并创建本地分支

  1. git checkout -b 本地分支名x origin/远程分支名x
    使用该方式会在本地新建分支x,并自动切换到该本地分支x。
    采用此种方法建立的本地分支会和远程分支建立映射关系。
  2. git fetch origin 远程分支名x:本地分支名x
    使用该方式会在本地新建分支x,但是不会自动切换到该本地分支x,需要手动checkout。
    采用此种方法建立的本地分支不会和远程分支建立映射关系。

本地分支和远程分支建立映射关系

作用:这样使用git pull或者git push时就不必每次都要指定从远程的哪个分支拉取合并和推送到远程的哪个分支了
建立联系:git branch -u origin/分支名git branch --set-upstream-to origin/分支名
撤销本地分支与远程分支的映射关系:git branch --unset-upstream

Git在合并分支的时候,一般会使用Fast forward模式。但是此模式,删除分支后,会丢掉分支信息。

git push my master-bug-ZSTAC-23254
git checkout master
git pull origin master

当你在 master 分支上开了一个新分支并且已经解决完问题后,可以将 master 和 hotfix 进行合并,使用 $ git checkout master, $ git merge hotfix 进行合并。
$ git checkout master $ git merge workBranch 。合并完成后,可以将工作分支删除。$ git branch -d workBranch,需要注意的是,当我们删除的分支还包含未提交的内容,分支删除会失效。强制删除可以使用 -D

@thinkingc thinkingc added the blog knowledge summary label Apr 26, 2020
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
blog knowledge summary
Projects
None yet
Development

No branches or pull requests

1 participant