Git使用方法总结

git原理图

创建一个新的分支

git checkout -b my-test  //在当前分支下创建my-test的本地分支分支

向远程仓库推送一个新的分支

思路是在本地仓库新建一个分支(此分支的名称要跟远程一致),然后再将这个分支推到远程仓库

git checkout -b my-test  //在当前分支下创建my-test的本地分支分支
git push origin my-test  //将my-test分支推送到远程
git branch --set-upstream-to=origin/my-test //将本地分支my-test关联到远程分支my-test上   
git branch -a //查看远程分支 

修改默认的编译器

git config --global core.editor vim

从远程仓库获取某个分支(的代码)

已有本地仓库
git checkout -b branchA origin/branchB

其中branchA为远程分支,branchB是拉到本地后希望它的名字,在网络条件不好的情况下可以:

git fetch origin branchA:branchB --depth=1
尚未有本地仓库
git clone -b <指定分支名> <远程仓库地址>

例如:

git clone -b v_controller http://xxxxxxxxxxxxxxxxxxxxx.git

同样在网络条件不好的情况下可以,加 --depth=1来只获取最近一次提交(最新)的代码

删除本地或者远程仓库的分支

删除本地分支:

git branch -d 分支名

此命令执行时,如果该分支有尚未合并或地commit的文件,会失败,如果要强行删除需要用下面这个命令.

强制删本地:

git branch -D 分支名

删除远程分支:

git push origin --delete 分支名

如:

git push origin --delete my-validation_controller

向远程仓库上提交代码的一些经验和方法

提交pull request到devel

第一步 压缩commit
新分支只允许有一个commit来方便追踪,使评分的纪录保持清析,这时候首先要将要提交的分支例如need_to_push分支,如果有多个commit,需要合并成一个commit,步骤如下:
1.选择要压缩的commit

git checkout need_to_push
git log
git rebase -i HEAD~4(代码要将几个最新的commit合成一个,其中最老一个commit是不能合并的)

2.修改第2-4行的第一个单词pick为squash,这个意义为将最后三次的提交压缩到倒数第四次的提交,效果就是我们在pick所在的提交就已经做了4次动作,但是看起来就是一次而已。

3.保存退出,git会一个一个压缩提交历史,如果有冲突,需要修改.修改的完成之后:

git add 修改的文件
git rebase --continue

如果你想放弃这次压缩的话,执行以下命令:

git rebase --abort

4.如果所有冲突都已经解决了,需要修改一下合并后的commit的描述信息.

5.保存退出,合并commit完成.

压缩comit的方法详情请参考:https://blog.csdn.net/itfootball/article/details/44154121

第二步 往远程仓库上推送代码

​   推到远程仓库上的分支目的是要合并到主分支上的,合并的时候,该分支一定要比当前的主分支新,否则是合并不成功的。所以为了保证如合并成功,一定要保证这个需要上传的分支是在最新的主分支上完成的修改。

​   为了满足这种条件,我使用的思路:删除本地的主分支,从远程仓库上获取到最新的主分支,然后将need_to_push合并好的唯一一次commit cherry-pick到主分支上(这个过程可能会有冲突,需要去解决),最后编译,一定要编译,一定要编译,要不然一旦出了错会很尴尬。编译成功会后将这个主分支推送到远程仓库上(如果没有权限提交主分支的代码,可以以当前主分支在本地建一个新的分支,然后将新的分支推到远程仓库上,让有权限的人去合并到主分支上)。

具体的步骤:

1.删除本地的主分支 从远程fetch获取最新的主分支

git checkout need_to_push 
git branch -D devel(上一步是为了保证在删除的时候,不在当前分支上)
git fetch origin devel:devel --depth=1(网络不好加上depth选项,这里确实只需要最新的,所以也没事)
git branch (查看上一步操作是否成功)

2.将commit cherry-pick 到本地的devel上

git log 查看need_to_push的commit id ,假设为d58b14dce8a
git checkout devel
git cherry-pick d58b14dce8a(如有冲突解决一下,参考https://blog.csdn.net/fightfightfight/article/details/81039050)

3.编译!!!

make

4.上传到远程仓库

适用于远程没有的分支:

git checkout -b my-test  //在当前分支(主分支)下创建my-test的本地分支分支
git push origin my-test  //将my-test分支推送到远程

适用于远程已经有的分支:

git push -f origin need_to_push(,这个方式理论上能成功,但是我没有试过)

最后,如果上传到远程仓库后,在合并的时候还提示不是最新的主分支(在上述操作过程中有人上传过代码)怎么办?
没事,再来一遍就是了,重新拉最新的主分支, cherry-pick need_to_push的那次commit,然后编译再上传.

设置和查看追踪

设置当前分支跟踪远程分支origin/serverfix

git branch -u origin/serverfix

查看本地分支和远程分支的跟踪关系

git branch -vv

git fetch

方法一

使用如下命令:

git checkout -b 本地分支名x origin/远程分支名x

使用该方式会在本地新建分支x,并自动切换到该本地分支x。
采用此种方法建立的本地分支会和远程分支建立映射关系。

方式二

使用如下命令:

git fetch origin 远程分支名x:本地分支名x

使用该方式会在本地新建分支x,但是不会自动切换到该本地分支x,需要手动checkout。
采用此种方法建立的本地分支不会和远程分支建立映射关系。

推荐使用第一方式,因为自动建立了关联联系,以后会省很多事,之前从远程拉取分支方法是不正统的。

git fetch的主要用法

git fetch origin master:tmp 

在本地新建一个temp分支,并将远程origin仓库的master分支代码下载到本地temp分支

git diff tmp 

来比较本地代码与刚刚从远程下载下来的代码的区别

git merge tmp

合并temp分支到本地的master分支

git branch -d temp

如果不想保留temp分支 可以用这步删除

参考:https://www.ruanyifeng.com/blog/2014/06/git_remote.html

Git Pull push 只对当前分支操作

git pull <远程主机名> <远程分支名>:<本地分支名>
git push <远程主机名> <远程分支名>:<本地分支名>

Git 删除某一个commit

1,查看地当看log

git log

找到要删除的提交 Id ( 简写为 Id-a) 之前一次 提交的 Id (简写为 Id-b);

2,rebase 操作

git rebase -i  Id-b

表示回退到之前的版本,并在之后会提交需要的所有提交。

3.删除要删除的提交(skip 变成 drop 或者 删除想要删除的那一行),并保存退出。

4.将本地的修复推送到远端

git push origin branch-name --force

备注:可能存在 git rebase --continue 提示,按照提示执行即可。

Git --force 用法

git pull origin add_control_validators:add_control_validators  --force

无论是push还是pull,加了–force相当于,把本地的版本删除,把远程的分支拉下来覆盖,
同理push也是一样。这种操作是不安全的,在多人协作的分支,要谨慎使用。

撤销add和commit

撤销add

git reset

撤销commit

git add . //添加所有文件
git commit -m “本功能全部完成”

执行完commit后,想撤回commit
这样操作:
git reset --soft HEAD^

HEAD^的意思是上一个版本,也可以写成HEAD~1
如果你进行了2次commit,想都撤回,可以使用HEAD~2

–soft
不删除工作空间改动代码,撤销commit,不撤销git add .
–hard
删除工作空间改动代码,撤销commit,撤销git add .
注意完成这个操作后,就恢复到了上一次的commit状态。

删除untrack files

git clean -f

更改分支名

git branch -m oldName newName

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: git merge 命令用于将两个分支的内容合并到一起。它的用法如下: ``` git merge <分支名> ``` 例如,要将 `feature` 分支合并到当前分支,可以使用以下命令: ``` git merge feature ``` 如果在合并时发生冲突,git 会提示你解决冲突。你需要打开冲突文件,找到冲突部分,手动修改后提交。冲突的标记格式如下: ``` <<<<<<< HEAD 当前分支的内容 ======= 要合并的分支的内容 >>>>>>> <分支名> ``` 你需要在 `<<<<<<< HEAD` 和 `=======` 之间写入你想要保留的内容,在 `=======` 和 `>>>>>>> <分支名>` 之间写入你想要忽略的内容,然后保存文件,并使用以下命令提交更改: ``` git add <冲突文件> git commit -m "解决冲突" ``` 如果要强制合并,可以使用 `-f` 参数,但这通常不是推荐的做法,因为它可能会丢失某些信息。 ``` git merge -f <分支名> ``` ### 回答2: git merge 是 Git 提供的一个命令,用于将不同分支的更改合并到当前分支中。 使用 git merge 的步骤如下: 1. 确定当前所在的分支,可以使用命令 `git branch` 查看当前分支,或者使用 `git status` 查看当前分支的状态。 2. 切换到要合并的目标分支,使用命令 `git checkout <目标分支>` 切换到目标分支。 3. 检查和确认目标分支的更改是否已经准备好合并,可以使用 `git log` 查看目标分支上的提交历史。 4. 切换回当前分支,使用命令 `git checkout <当前分支>` 切换回当前分支。 5. 运行 `git merge <目标分支>` 命令,将目标分支的更改合并到当前分支中。这个命令会将目标分支上的最新提交合并到当前分支上,并且会自动处理可能出现的冲突。 6. 如果合并过程中出现了冲突,需要手动解决冲突。可以通过编辑冲突文件,手动选择想要保留的更改,然后使用 `git add` 命令将解决后的文件添加到暂存区,并且使用 `git commit` 命令提交解决冲突后的文件。 7. 完成合并之后,可以使用 `git log` 命令查看合并后的提交历史,确认合并是否成功。 总结起来,git merge 的使用方法可以归纳为确定当前分支、切换目标分支、检查目标分支的提交历史、切回当前分支、执行合并命令、解决冲突(如果有)、查看合并结果。通过这些步骤,我们可以将不同分支的更改合并到当前分支,并且保持提交历史完整和正确。 ### 回答3: git merge 是一种用于将不同分支的更改合并到一起的命令。它可以将一个分支的修改应用到另一个分支上,使两个分支的更改保持一致。 使用 git merge 命令的基本语法是:git merge <branch> ,其中<branch>是要合并的分支名称。在执行这个命令之前,需要首先切换到要合并到的目标分支上。 合并前,需要确保目标分支工作区是干净的,没有未提交的更改。如果有未提交的更改,可以先提交或者暂存起来。 执行 git merge 命令后,Git 会尝试将要合并的分支的更改应用到目标分支上。如果两个分支上对同一个文件进行了修改,Git 将会自动尝试合并这些修改。如果修改不冲突,合并将会成功,并带来一个新的提交。如果有冲突,Git 将会提示冲突的文件,并需要手动解决这些冲突。解决冲突后,需要再次提交来完成合并。 除了基本的合并操作,git merge 还有一些常用的选项可以使用。例如, --no-ff 选项可以强制 Git 生成一个新的合并提交,即使合并是快进式的。 --squash 选项可以将多个提交压缩成一个提交。同时,还可以使用 --abort 选项取消当前的合并操作。 总结来说,git merge 是一种用于合并分支更改的命令。通过合并,可以将一个分支的更改应用到另一个分支上,使两个分支保持一致。同时,注意处理冲突,选择适用的合并选项,以及确保工作区是干净的,都是更好地使用 git merge 命令的要点。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值