0%

git基础操作-常用命令

常用Git 命令清单- 阮一峰的网络日志

记录了一些工作中实际会用到的常用命令

git commit规范

参见https://www.ruanyifeng.com/blog/2016/01/commit_message_change_log.html

安装Commitizen
1
2
#先要安装npm
npm install -g commitizen
配置Angular规范
1
commitizen init cz-conventional-changelog --save --save-exact

以后,凡是用到git commit命令,一律改成git cz。

.gitignore规范

1
2
3
4
5
6
7
8
9
10
11
 
# 此为注释 – 将被 Git 忽略
# 忽略所有 .a 结尾的文件
*.a
# 但 lib.a 除外!lib.a
# 仅仅忽略项目根目录下的 TODO 文件,不包括 subdir
/TODO/TODO
# 忽略 build/ 目录下的所有文件
build/
# 会忽略 doc/notes.txt 但不包括 doc/server/arch.txt
doc/*.txt

git add -u | -A | . 的区别

参考自https://blog.csdn.net/return_cc/article/details/78405176

  • git add . 会监控工作区的状态树,使用它会把工作时的所有变化提交到暂存区,包括文件内容修改(modified)以及新文件(new),但不包括被删除的文件,因为被删除的文件已经在工作区不可见
  • git add -u 他仅监控tracked file,他会将被修改的文件提交到暂存区。add -u 不会提交新文件(untracked file),但是可以感知被删除的tracked file。
  • git add -A 是上面两种功能的集合。

举例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
git init
echo Change me > change-me
echo Delete me > delete-me
git add change-me delete-me
git commit -m initial

echo OK >> change-me
rm delete-me
echo Add me > add-me
#删除了delete-me文件,修改了change-me文件,新增了add-me文件

git status
# Changed but not updated:
# modified: change-me
# deleted: delete-me
# Untracked files:
# add-me
#其中chane-me文件和delete-me文件是tranched file,add-me文件是未tracked文件
#chang-me和add-me文件是工作区文件,delete-me是非工作区文件

git add .
git status


# Changes to be committed:
# new file: add-me
# modified: change-me
# Changed but not updated:
# deleted: delete-me

# git add . 仅能监控工作区文件,所以它可以提交add-me和change-me但是不能提交delete-me

git reset #git reset可以重置暂存区的文件使其与上一次的commit保持一致,工作区文件内容保持不变

git add -u
git status

# Changes to be committed:
# modified: change-me
# deleted: delete-me
# Untracked files:
# add-me

# git add -u 仅能监控tracked file,所以它可以提交change-me和delete-me但是不能提交add-me

git reset


git add -A
git status


# Changes to be committed:
# new file: add-me
# modified: change-me
# deleted: delete-me

# git add -A 可以提交所有变化,包括trancked file的变化和工作区的变化

git删除tracked file

https://www.cnblogs.com/zhangmingyan/articles/12099108.html

git rm --cached file

不删除物理文件,仅将该文件从缓存中删除,可以看作是git add的反向操作

lfs管理大文件

查找大小大于1M的文件后缀

1
git lfs migrate info --above="1 MB" --everything --top 10

追踪指定后缀的文件

1
git lfs migrate import --include="*.jar,*.pdf" --everything

确认被track的对象

1
git lfs ls-files 

push全部到远程

1
git push origin -f --all && git push origin -f --tags

git push

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

这里的冒号前后没有空格

如果省略远程分支名,则表示将本地分支推送与之存在"追踪关系"的远程分支(通常两者同名),如果该远程分支不存在,则会被新建。

1
git push origin master

上面命令表示,将本地的master分支推送到origin主机的master分支。如果后者不存在,则会被新建。

git push -u origin master

1
2
3
4
5
6
git push -u origin master 
相当于
git branch --set-upstream-to=origin/master master//将远程仓库origin的master分支与本地仓库master分支关联

git push origin master

git reset --hard

强制恢复到上一次commit的状态

git clone -b git_url

指定分支进行git clone

git checkout source_branch ...

从其他分支merge个别文件

https://blog.csdn.net/SJZYLC/article/details/49591211

1
git checkout remotes/origin/mpi_meeting inference_basler.py 
git checkout -b

git pull只会拉取远程仓库的master分支,要想在其他分支上进行同步,需要先

1
git branch -a 

查看所有分支的分支名字,包括目标远程分支

1
git checkout -b <branch_name> <remote_branch_name>

再运行上述操作就可以创建一个本地分支(建议和远程分支名字保持一致),同时指定其跟踪对应的远程分支

遇到bug该怎么办

  • 创建临时分支bugFix
  • 在bugFix里面添加调试语句
  • 修复bug
  • 删除调试语句
  • merge到原来的分支

git commit --amend -m "xxx"

https://zhuanlan.zhihu.com/p/340007149

修改commit提交信息

1
git commit --amend

本地分支跟踪远程分支

查看分支跟踪情况

1
git branch -vv

输出为

1
* basler_mpi_inf b725b14 [origin/basler_mpi_inf] feature: new fps calculation

branch-name分支追踪远程分支origin/branch-name

1
git branch --set-upstream branch-name origin/branch-name

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

1
git branch -u origin/serverfix