git 使用方法 (reset merge rebase stash diff等)

基本功能:
git clone:克隆仓库
git pull:从远程仓库拉取代码到本地
 
git stash:将修改后的代码存储到本地(一个栈结构)
git stash pop:将你stash到本地的代码与重新git pull下的代码合并
 
git add XXX:将XXX文件加入到暂存区
git commit -m "注释":将暂存区的文件提交到本地仓库
git push:将本地仓库的内容推送到远程仓库
 
git checkout:切换分支或恢复工作树文件
 
-d:删除
-D:强制删除
删除本地分支:
git branch -D 分支名
删除远程分支:
git push origin --delete 分支名
 
获取新分支的代码
git checkout -b dev_etf_m3(本地名称) origin/dev_etf_m3(远程名称)
 
 
将diff.txt导入
git apply --reject diff.txt
 

log相关

查看当前分支图形化的commit历史(oneline 一条提交信息用一行展示)

git log --oneline --graph

显示当前分支的创建来源分支

git reflog show branchname

git diff 相关

只列出文件名不列出详细信息:

git diff --name-only

只列出文件名和增加、删除、修改等:

git diff --name-status

git diff 排除指定目录,如排除toolchain

git diff ':!toolchain'

 

获取commit ID

git rev-parse HEAD # 获取完整的commit id

 git rev-parse --short HEAD # 获取短commit id

本地分支 push 到远程并追踪

git push --set-upstream origin branch_name

 
本地分支追踪远程分支
git branch --set-upstream dev_etf_m3(本地名称) origin/dev_etf_m3(远程名称)
git branch --set-upstream-to=origin/dev_etf_m3(远程名称) dev_etf_m3(本地名称)
 
git 标签tag 
git tag tagname           添加标签名为tagname的标签
git tag -a tagname -m "commit"       添加标签并加注释
git checkout tagname               切换到tagname标签
git tag -d tagname                        删除标签
git push origin tagname                    提交标签到仓库
 
git中名词含义
HEAD:大多数时候HEAD指向分支中最新提交。
master:git在首次创建repo时创建的默认分支的名称。在大多数情况下,“主”意味着“主要分支”。
origin:git为主远程仓库提供的默认名称。
 
例子:git reset --soft HEAD^
HEAD^的意思是上一个版本,也可以写成HEAD~1;
如果进行两次commit都想撤回,使用HEAD~2;
 
 
本地分支推送到远程
git checkout -b feature-branch //创建并切换到分支feature-branch  
git push origin feature-branch:feature-branch //推送本地的feature-branch(冒号前面的)分支到远程origin的feature-branch(冒号后面的)分支(没有会自动创建)
 
 
rebase使用具体流程(作用是解决分叉)
git clone master branch
git checkout -b local
(在本地分支上开发和测试)
git checkout master
git pull
git checkout local
git rebase -i HEAD~2 //合并提交 2表示合并两个
git rebase master  ----->解决冲突 ----->git rebase --contine
git checkout master
git merge local
git push
 
 
merge合并代码流程:
1、切换到merge的分支
git checkout dev_ht_etf
2、把代码拉下来
git pull
3、切换回原来的分支
git checkout dev_ht_etf_niemao
4、将原分支有的改动,则提交
git status
5、将要merge的分支merge过来
git merge dev_ht_etf
6、有冲突的需要解决冲突
git status
vi ETFRiskCtrl/PosHandler.hpp
7、将解决了冲突的文件再次提交一下
git status
git add ETFRiskCtrl/PosHandler.hpp
git commit -m "merge codes from dev_ht_etf -> dev_ht_etf_niemao"
8、push
 
 
stash使用方法:
 git stash:将修改存储到stash中(本地)
 git stash list:查看所有的stash
 git stash pop:弹出最新的那个stash
 git stash apply stash@{x}
 git stash drop stash@{x}
 git stash clear
 
 
 
 reset的使用方法
reset:commit之后想撤销commit
--mixed:不删除工作空间代码,撤销commit,并且撤销git add。为默认参数, git reset --mixed HEAD^ 和 git reset HEAD^是一样的。
--soft:不删除工作空间代码, 撤销commit,不撤销git add。
--hard:删除工作空间代码,撤销commit,撤销git add。操作完成后,就恢复上一次commit的状态。
如果只是修改commit注释:git commit --amend
 
 
对比两个分支的差异的方法
1、显示出branch1 branch2中差异部分
git diff branch1 branch2 --stat
2、显示指定文件的详细差异
git diff branch1 branch2 具体文件路径
3、显示出所有有差异的文件的详细差异
git diff branch1 branch2
4、查看branch1 分支有,而branch2中没有的log
git log branch1 ^branch2
5、查看branch2中比branch1中多提交了哪些内容
git log branch1..branch2
6、不知到谁提交的多,谁提交的少,单纯想知道有什么不一样
git log branch1...branch2
7、在上述情况下,在显示出每个提交是在哪个分支上
git log --left-right branch1...branch2
注意:commit后面的箭头,根据我们在--left-right branch1...branch2的顺序,左箭头<表示是branch1,右箭头>表示是branch2的。
 
 

本地撤销commit

1、git reset --soft|--mixed | --hard <commit_id>
2、git push develop develop --force (本地和远程分支都是develop)
 
远程仓库合并commit

1、git log

找到和合并commit的分支

2、git rebase -i <commit_id>

执行rebase后,会弹出窗口

pick 3ca6ec3   '注释**********'
 
pick 1b40566   '注释*********'
 
pick 53f244a   '注释**********'

将除了第一个的pick,其他都改为 s 或 squash

pick 3ca6ec3   '注释**********'
 
s 1b40566   '注释*********'
 
s 53f244a   '注释**********'

修改后保存退出,这时 git log 一下,发现提交已经合并

3、 git push -f 

到这里以后,  git status  后会看到,提示让你git pull一下,千万不要这样做!否则你会发现这三条白合并了,还平白多了两条commit

这时候,需要强制push上去  git push -f , 当然要确保强制push不会覆盖了别人的代码,如果这个分支只有你维护那就可以为所欲为了

到此,合并多个远程分支成功~

资料:

https://www.jianshu.com/p/f7ed3dd0d2d8

https://www.cnblogs.com/qianqiannian/p/6008140.html

https://www.cnblogs.com/cristiano-duan/p/12682038.html

https://blog.csdn.net/default7/article/details/100515595

撤销本地commit:https://www.cnblogs.com/wuyun-blog/p/10026363.html

合并远程仓库commit:https://blog.csdn.net/qq_21744873/article/details/82629343 

https://www.cnblogs.com/xiaojianliu/p/12618921.html

原文地址:https://www.cnblogs.com/xiaohaigegede/p/13597528.html