git工作实践

从gitea切换到gitLab快一年了,而且又是独立开发维护一个项目,很多git命令都有些模糊了,重新整理记录一下;

git实践

1 修改上次的提交

1
2
3
git add 
git commit --amend --no-edit
git push

2 分支合并前,合并多次提交

2.1 应用场景

对于一个项目,你可能会多次提交代码,每次提交都对应一个commit sha

avatar

当完成项目,要进行分支合并的时候,只想保留一个或某几个commit,这时候就需要合并commit了。

2.2 如何合并

这里介绍两种方式,第一种是git rebase,第二种是git rebase --autosquash,后者在git commit时是有条件的。

1) git rebase
第一步,开启交互模式

1
2
// 注意,这里的<commit_sha>是你针对此项目第一个提交的前一个提交的commit。
git rebase -i <commit_sha>

举个例子:

下面是工作中的提交记录:

avatar

这时我们想要把前七个commit合并成一个,即:
avatar

其中commit_sha是第一个提交的前一个提交的哈希。 因此,在我的示例中,命令为:

1
git rebase -i 6394dc

第二步,再去合并

这时候会弹出一个框,列出了你想要合并的所有commit。注意列出的顺序是从老到新的。

avatar

更改commit_sha最前面的单词,我们打算把这七个合并成一个commit,那么更改如下:
avatar

保存退出后,又弹出一个新的框,让我们更改commit信息,编辑完后退出就好了。
最后执行:

1
git push -f

最后完成的效果如下:

avatar

  1. git rebase --autosquash

顾名思义,就是会自动帮你压缩commit。但是你在git commit的时候需要使用特殊命令:

1
git commit --fixup=<commit_sha>

这里的commit_sha是指你对哪个commit进行了更改,所以必须先至少存在一个对该项目的提交。

举个例子:

下面是工作中的提交记录:

avatar

我现在有有了一个新的改动,那么在提交时,就需要用如下命令表明我是对上一个commit进行了更改:

1
git commit --fixup=d94e78

产生的效果是这样的:

avatar

这时候又有了一个新的改动,那么提交时的命令不变:

1
git commit --fixup=d94e78

产生的效果:

avatar

接下来我们进行合并操作:

1
git rebase --autosquash -i <commit_sha>

注意,这里的commit_shaolder commit6394dc

Git这时会很机智的补全单词,不需要手动输入了。

avatar

直接保存退出,重新编辑提交信息即可。

以上两种方式,一种是提交时轻松,合并时麻烦,另外一种相反。可以根据喜好来选择使用。

3 对特定项目设置用户名/邮箱/密码的方法

3.1.找到项目所在目录下的.git,进入.git文件夹,然后执行如下命令分别设置用户名和邮箱

1
2
git config user.name "BugKillerPro"
git config user.email "511808895@qq.com"

然后执行命令查看config文件:

1
cat config

发现里面多了刚才配置的用户名和邮箱信息user,即成功为该项目单独设置了用户名和邮箱

1
2
3
4
5
6
7
8
...
[branch "master"]
remote = origin
merge = refs/heads/master
[user]
name = BugKillerPro
email = 511808895@qq.com

2.如果git pull 每次都要求输入用户名和密码,则可以执行如下配置

1
git config credential.helper store

执行后, cat config查看,则多了credential的内容:

1
2
3
4
5
[user]
name = BugKillerPro
email = 511808895@qq.com
[credential]
helper = store

然后再回到项目目录下执行git pull/push,根据提示输入用户名和密码,输入正确后,以后再执行git pull/push 就不用输入用户名和密码了

4 合作开发同一个分支,提交本地修改流程

第一种:

1
2
3
4
5
6
7
8
9
10
git add -A
git commit -m "www"
git push
# 无冲突,则结束,有冲突,则继续执行下面的操作
git pull --rebase
# 解决本地文件冲突
git add -A
git commit --amend
git rebase --continue
git push

第二种:

1
2
3
4
5
6
7
git stash     # 暂存
git pull # 本地文件会变得和最新远程仓库一致
git stash pop # 暂存内容恢复
# 无冲突,则push,有冲突,则继续执行下面的操作
git add -A
git commit -m "www"
git push

参考

知乎

简书