Git使用记录

提交代码前—rebase操作

背景

当多人开发一个工程的是时候,个人提交代码前一定要进行rebase操作。rebase的意义就是把自己的提交(commit)先取消,然后拉取(pull)最新远程分支(最新的远程分支可能包含本地没有的提交记录),之后把自己的提交应用到这个新的远程分支上,git的历史记录就没有merge操作。

如何操作
  • 最简洁的方法 git pull --rebase,命令的意义就是拉取最新的远程分支,并进行rebase操作。
  • 还有另一种操作方式,麻烦一些
git remote update //查看远程更新的情况
git rebase //rebase操作
git push //提交本地的commit记录到远程分支,这也不会产生merge操作

推送最后一次修改(HEAD)到远程仓库

  • git push origin HEAD:refs/for/$(git branch --show-current)。把最后一次修改(HEAD)推送到远程仓库
  • $(git branch --show-current) 这个是使用命令自动获取当前本地分支名字。

git本地分支和远程分支关联

为什要关联
  • 把本地git工程和已存在的远程git库(远程库可能有提交)关联。这里的关联其实是指定远程追踪分支。让git pushgit pull 后面不用加参数即可把本地分支推送到远程分支。在本地工程没有关联远程分支的情况下需要git push origin master来推送本地分支(master)到远程分支(origin)。
如何操作
  • 本地分支名称master,远程分支地址:URL
  • git remote add origin URL,首先把URL代表的远程库添加为本地库的一个远程库,并把它命名为origin
  • git pull --rebase origin master,这里进行rebase操作是防止远程库已有提交,如果直接git push,git会提示失败,“远程库有本地没有的提交”。
  • git push --set-upstream origin master。至此,以后push和pull操作就可以直接git push或者git pull完成了。这个指令完成了下面几个操作:
  1. --set-upstream建立本地分支与远程库的关联,就是把远程库中的分支设定为远程追踪分支
  2. 参数origin是指远程库,master是要推送的本地分支。如果远程库中没有同名分支(这里是master),就会在远程库中建立master分支。
关于push推送非同名远程分支的指令
  • git push origin master:dev这个命令的意思是把本地分支master推送到origin中的远程分支dev,如果远程库中没有dev分支,则新建dev分支。不过并不建议这么操作,开发中最好还是让本地分支和远程分支同名。(注意冒号前不要加空格,否则这个命令会删除远程dev分支,我也不是很清楚这是什么骚操作)
  • git push origin master dev 这个命令的意思是把本地分支master和本地分支dev推送到远程对应分支,如果远程库不存在对应分支,则新建分支。

Android studio中git记录中颜色的意义

  • 蓝色代表在已有的代码上的修改
  • 青绿色代表添加新的行
  • 白色代表删除代码行

git配置push、pull的默认密码

背景

在用git想公司代码库提交代码的时候,每次git pushgit pull总会让我输入账号和密码,每次输入就很麻烦,进行下面的配置就可以解决问题,配置默认密码。另外,本次配置只记录了Linux下的配置方法,网上还有很多Windows下的配置,百度就OK了。

如何操作
  • touch .git-credentials 在个人home目录下,建立 .git-credentials 这个文件。
  • gedit .git-credentials 或者vi .git-credentials
  • https://username:password@github.com把这行添加到上面的文件中。@后面是远程代码库网址,不用www之类的全称,像上面github那样就可以。如果不止一个代码库网址,就在下面添加同样的新行配置另一个网址,例如https://username:password@gitlab.com
  • git config --global credential.helper store执行完这个指令,密码配置就做好了。打开home目录下的.gitcofig文件,应该就能发现多了:
[credential]
helper = store

git reset

git中几个概念:

  • 工作区(working tree)。文件修改后,在被git add . 之前,文件是处于工作区的,此时git diff是可以看见文件的修改,git status 看到的文件状态是unstaged 状态。
  • 暂存区(index)。git add .会将修改的文件存入暂存区。因为英语用index表示,也可以叫做索引区。git status看到的文件状态时等待提交。git add .操作也可以叫做stage changes。暂存修改。
  • 版本库。所有的历史commit记录。
git reset --mixed/hard/soft [commit id]
  • git reset --mixedgit resetgit reset --mixed是reset 无参数时的默认操作。这个操作会将暂存区(index)的修改文件reset到工作区(working tree)。变为unstage状态。文件的修改不变。如果git reset 之后加上commit id,那么会把当前的HEAD指向该commit id,当前的文件内容不变,commit id之后的修改全部进入工作区
  • git reset --hard。回退工作区(working tree)和暂存区(index)的文件修改。此时所有的文件修改都会被删除,并且不可找回。
  • git reset --soft。可以回退到指定的旧的commit id,HEAD也指向该commit id,此时文件内容完全不变。旧的commit id 此次之后的修改都会被退回到index暂存区中。此时可以重新commit,在本地被回退掉的commit不在git log 中展示。

在commit时添加注释模板

在默认的git中,在执行git commit之后,会进入添加注释的界面.我们可以添加一个默认的注释模板.

实现方法
  • 在home目录下 vi .gitmsg_sh
  • 添加日志模板.例如
    Description:
    Team:
    Feature or Bugfix:
  • 在命令行中执行 git config --globa commit.template ~/.gitmsg_sh,配置完成
更改git 的默认文本编辑器
  • 在home目录中的.bashrc文件中增加 export GIT_EDITOR= vim

git diff、git apply

  • git diff 生成path
  • git apply --check xxxx.patch 检查当前的patch是否可以应用到git仓中,是否会出现冲突
  • git apply --reject xxxx.patch 即使存在冲突,也将path 应用到git仓中,如果存在冲突,会生成冲突文件,需要手动解冲突。
  • git format-patchgit am用于生成、应用patch,这两个命令的优点是可以保存提交者的commit信息。

查看历史修改

  • git show 展示最近一次修改详细内容。git show [commitId] 展示指定的commitId的修改内容
  • git whatchanged 展示最近修改的文件列表。git whatchanged [commitId] 展示指定commitId的修改文件列表。
  • git log -p [filename] 展示某个文件的所有更改记录
  • git blame [filename] 查看文件的每一行的修改历史
    • git blame [filename] -L 1320,+10 查看文件在1320行,向下10行的修改日志

其他

  • git reflog --date=iso 显示日期的reflog
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值