Git 本地开发个人使用习惯汇总(持续更新)
上传
单人开发
- 首先使用
git status检查本地branch code状况。 - 检查需要上传的文件后直接
add .或者单独add xxx添加到stage区。 - 接着使用
git commit -m "XXX commit"commit代码。 - 最后使用
git push或者git push origin xxx-branch上传。
多人开发
- 首先使用
git status检查本地branch code状况。 - 使用
git add -u将文件先存到缓存区。 - 再使用
git status检查是否有漏网之鱼的untracked files,如果有,使用git add fileName单独插入。 - 接着使用
git stash save "XXXTag"将stage的code先存起来。 - 之后使用
git pull或者git pull origin/master把远端的code先拉下来。 - 最后再用
git stash pop把刚才存起来的数据拿回来。 - 这样就可以在本地编译器上进行merge操作,成功compile之后就按照单人开发的最后流程进行上传。
- 一般会创建新的临时branch,再使用Merge request的工具去合入。
- 创建临时的branch,
git checkout -b temp-branch。 - 上传branch,
git push origin temp-branch。 - 如果需要对该分支进行修改,第一次push时,需要
git push --set-upstream origin tem-branch。
- 创建临时的branch,
本地合并分支到主分支
- 首先检查本地分支状态
git status,将代码add并commit。 - 将本地分支切换到主分支
git chcekout main-branch。 - 拉取主分支的最新代码
git pull origin main-branch,如果之前的本地的main分支已经改过了,那么此处就会出现conflict,需要merge第一次。如果该处的代码改动被放到了本地分支中,计划要在下一步进行合并,那么此处可以直接摒弃掉之前在本地分支的修改,直接选用远端代码即可。 - 在本地将本地分支合并到主分支
git merge local-branch,处理conflict。 - 使用
git status可以查看conflict的文档。
检查
-
git status- 最常用的git命令,显示文件的状态,包括
Changes to be committed,Changes not staged for commit,Untracked files,Unmerged paths。 git status -s简略地展示被修改的文件以及修改的状态,例如:M xxx/xxx/xxx.java代表该文件进行了修改,D xxx/xxx/xxx.java代表该文件被删除。
- 最常用的git命令,显示文件的状态,包括
-
git log- 常用于检查branch和commit的状态。
-
git branch -vv- 可以显示本地的branch是否和远端的某个branch相连以及和哪一个branch相连。
- 如果需要使本地某个branch和远端某个branch相连,可以在该branch下,使用
git branch --set-upstream-to=origin/xxxBranch来指定。
-
git reflog- 查看所有引用的历史记录。
- 最上面的纪录就是最新的记录。
- 最左边的代码代码对应的哈希值。
- 配合
git reset --hard 哈希值可以做到回退到某个时间点。
-
git diff- 用于检查所有没有暂存(add到stage)中的修改。
git diff com/xxx/xxx/xxx.java检查特定文件的修改。git diff --stat简略显示统计修改的文件
.gitignore
一些本地文件,包括local配置,log,target等等不需要上传到git,需要添加.gitignore规则。
-
找到/创建
.gitignore文件- 可以用
ls列出全部文件寻找,一般git仓库创建的时候会默认创建。 - 如果没有,手动创建。
- 可以用
-
在文件中添加对应的规则
- 忽略后缀文件,例如:
*.log。 - 忽略整个文件夹文件,例如:
com/example/*。 - 忽略指定文件,例如:
com/example/target/xxx.java。
- 忽略后缀文件,例如:
-
上传
git add .gitignore。git commit -m "add rules to .gitignore commit"。git push。
-
清除已经in tracking的文件
- 对于已经tracking过的文件,直接添加规则在.gitignore中是无效的,必须先清除该文件的tracking才能生效。
- 清除tracking
git rm --cached com/xxx/xxx/xxx.xml。 - 在.gitignore中添加规则。
回退
直接回退上一个git add.
git reset。
回退文件修改
包括对某个文件的删除(git rm xxx.java),修改和添加,前提是该文件没有添加到stage区。
git restore xxx.java。
回退stage区
单个文件
git restore --stage xxx.java。
全部
git restore --staged .。
修改
修改文件夹名字
-
一般修改
git mv olderFolderName newFolderName。
-
仅涉及到大小写的修改
- 因为大多数常见文件系统是大小写不敏感的(如 Windows 的 NTFS 和 macOS 的 APFS 默认配置),如果直接修改,git可能不会识别大小写的变化,导致名字修改不生效或者出现重复文件的bug,所以需要更多的步骤。
git mv olderFolderName tempFolderName。git commit -m "Temporarily rename oldFolder to tempFolder commit"这一步是必须的,因为在大小写不敏感的系统里,不进行这一步commit可能导致git在不识别这次操作,之后找不到文件名字,失去changed的情况。git mv tempFolderName newFolderName。git commit -m "Temporarily rename tempFolder to newFolder commit"。