git 命令:

  • 列出所有分支

    git branch

    git branch -v

    git branch -vvgit branch --merged  (列出已经合并到当前分支的分支,可删除)

    git branch --no-merged
  • 创建分支

    git branch iss53

  • 删除分支

    git branch -d testing

  • 切换到分支(本地工作目录会变)

    git checkout iss53

  • 创建并且切换到分支

  git checkout -b iss53

  • 合并分支,把分支合并到当前分支

  git merge hotfix

  • 有冲突的合并

    修改冲突文件,git add

    git status 查看直到没有冲突

    git commit

  • add & commit, 只add修改的文件

  git commit  -am"bala"

  • 与上次commit合并,会覆盖上次commit,新的commit id
    git commit --amend -m"update ff.txt"
  • 暂存

  git stash

  git stash save "some message"

  git stash list

  • 恢复

  git stash pop

在出现一个搁置栈的情况下,比如如果你想找回栈中的第2个,可以用 git stash apply stash@{1}

如果想找回第1个,可以用 git stash pop

如果想删除一个stash,git stash drop <id>

删除所有stash,git stash clear

---

  • 列出远程分支

    git ls-remote

    git remote show (remote)
  • 指定远程分支的名字

    git remote add name ...

    git clone -o name
  • 删除远程分支
    git push origin --delete dev
    git push origin :dev
  • 修改远程分支地址

  git remote set-url gitlab git@gitlab.gcloud.srcb.com:mhc/gpu-infra.git

 ---

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

  git fetch origin master:tmp

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

  git diff tmp

  • git pull 与fetch的区别

  git pull是git fetch和git merge两个步骤的结合  

  • push & pull

  git pull <远程主机名> <远程分支名>:<本地分支名>  (如果与当前分支合并,不写冒号后边的)

  git pull origin next  等价于

  git fetch origin && git merge origin/next

  • 建立追踪(会覆盖之前的追踪)

  git branch --set-upstream-to gitlab/master tmp  (不写本地分支则时当前分支)

  git branch --track tmp2 gitlab/master  会新建本地分支

  • 将另一个分支的commit应用过来(commit-id 要在另有一个分支git log查看)

  git cherry-pick commit-id..commit-id          (左开右闭,不包括左边的commit-id)

  git cherry-pick commit-id^..commit-id   (包括左边) 

  • 合并commit

  git rebase -i HEAD~数字

  

  • 选择pick操作,git会应用这个补丁,以同样的提交信息(commit message)保存提交
  • 选择reword操作,git会应用这个补丁,但需要重新编辑提交信息
  • 选择edit操作,git会应用这个补丁,但会因为amending而终止
  • 选择squash操作,git会应用这个补丁,但会与之前的提交合并
  • 选择fixup操作,git会应用这个补丁,但会丢掉提交日志
  • 选择exec操作,git会在shell中运行这个命令

--------------------------------------------------------------------------------

git配置

  • git使用其他的ssh端口

  # cat ~/.ssh/config
  host gitlab.gcloud.srcb.com
  hostname gitlab.gcloud.srcb.com
  port 19630

  • 代理配置

  git config --global https.proxy http://127.0.0.1:1080

  git config --global https.proxy https://127.0.0.1:1080

  git config --global --unset http.proxy

  git config --global --unset https.proxy

  npm config delete proxy

  git config --global http.proxy 'socks5://127.0.0.1:1080'
  git config --global https.proxy 'socks5://127.0.0.1:1080'

  • 设置全局和局部用户

   git config --global user.name mhcvs2
  git config --global user.email merzhong0501@163.com

  git config --local user.email "merzhong0501@163.com"

  git config --local user.name "mhcvs2"

  •  git push 免密码

  cd ~ && vim .git-credentials

  输入: https://{username}:{password}@github.com

  git config --global credential.helper store  

 

问题

  • push失败

error: 无法推送一些引用到 'https://github.com/cloud-pi/dbcm-roles.git'
提示:更新被拒绝,因为推送的一个分支的最新提交落后于其对应的远程分支。
提示:检出该分支并与远程变更合并(如 'git pull'),然后再推送。详见
提示:'git push --help' 中的 'Note about fast-forwards' 小节。

 

先备份一个分支 git checkout -b master_bak
删除git branch -D master
重新拉取git fetch origin master:master
git checkout master
git merge master_bak
git push origin master

  •  运行 git push 会push所有本地分支到追踪的远程,如果存在没有追踪的本地分支,git push命令会失败

git push origin  同样会失败

git push dev 会push所有带追踪的分支,忽略不带追踪的分支,但是却push到与本地同名的远程分支(不明白)

# git push origin dev
Warning: Permanently added '[gitlab.gcloud.srcb.com]:29675,[109.105.1.253]:29675' (ECDSA) to the list of known hosts.
Counting objects: 5, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 258 bytes | 0 bytes/s, done.
Total 3 (delta 1), reused 0 (delta 0)
remote:
remote: To create a merge request for dev, visit:
remote:   http://gitlab.gcloud.srcb.com/hongchao.ma/test/merge_requests/new?merge_request%5Bsource_branch%5D=dev
remote:
To git@gitlab.gcloud.srcb.com:hongchao.ma/test.git
 * [new branch]      dev -> dev
[root@mhc test]# git branch -vv
* dev    6e42088 [origin/master:领先 1] add
  master 4fa4514 add

git push origin dev:master  正确将本地dev分支push到远程master分支

 

  • git远程分支回滚操作步骤:

1、git checkout the_branch

2、git pull

3、git branch the_branch_backup //备份一下这个分支当前的情况

4、git reset --hard the_commit_id //把the_branch本地回滚到the_commit_id

5、git push origin :the_branch //删除远程 the_branch,不能是default分支

6、git push origin the_branch //用回滚后的本地分支重新建立远程分支

7、git push origin :the_branch_backup //如果前面都成功了,删除这个备份分支

 

Git撤销&回滚操作

https://blog.csdn.net/ligang2585116/article/details/71094887

git如何撤销上一次commit操作

1.第一种情况:还没有push,只是在本地commit

git reset --soft|--mixed|--hard <commit_id>
git push develop develop --force  (本地分支和远程分支都是 develop)

这里的<commit_id>就是每次commit的SHA-1,可以在log里查看到

--mixed    会保留源码,只是将git commit和index 信息回退到了某个版本.
--soft   保留源码,只回退到commit信息到某个版本.不涉及index的回退,如果还需要提交,直接commit即可.
--hard    源码也会回退到某个版本,commit和index 都会回退到某个版本.(注意,这种方式是改变本地代码仓库源码)

 

防止冲突的方法:

git branch tmp origin/master

git checkout tmp

git pull

git diff master

git merge master

解决冲突

git checkout master

git merge tmp

git branch -D tmp

========================

git 设置自动保存账号密码
git config --global credential.helper store