主页 如何使用git管理代码
Post
Cancel

如何使用git管理代码

全局配置git

1
2
$ git config --global user.name "username"  
$ git config --global user.email "email@you.com"

username 一般代表提交的本机用户名
email@you.com 一般是邮箱地址

创建本地仓库进行初始化

1
$ git init  

执行完成之后在本地创建一个 .git 的隐藏文件夹包含git的信息在里面

克隆远程版本库

1
$ git clone git@github.com:sunyazhou13/sunyazhou13.github.io.git

查看当前代码库状况

1
$ git status

git status 命令会显示当前代码库的状况,包括添加,修改(modified),删除(deleted)

版本管理

指向git当前最新版本为HEADHEAD^表示上一版本,HEAD^^上上一个版本,HEAD~100表示往上100个版本

添加本地修改代码

1
2
3
//添加当前目录的所有修改
$ git add .  

//如果需要添加指定文件可以这样
$ git add A B C // 中间用空格隔开
//如果有些文件标红 代表未纳入git 管理 可以 rm -rf xxx删除该文件
//如果有些文件标黄 代表有修改
//如果有些文件标绿 代表有文件已经纳入 git 管理

提交

1
2
$ git commit -am "[产品名称][迭代名称] 1.修改点 2.修改点xxx"
	

push到git代码仓库

1
2
$ git push origin HEAD:refs/for/master
	

如果是第一次提交 使用 git push -u origin master

push 的时候进行代码追踪

1
$ git push --set-upstream origin + 分支名

如果提交被废弃

1
2
3
4
5
$ git fetch origin master
$ git reset --soft origin/master
$ git add .
$ git commit -m "some comments"
$ git push origin HEAD:refs/for/master

回到本地代码库库中,执行

分支管理

创建分支并切换过去

1
$ git branch -b 分支名

切换分支

1
$ git checkout 分支名

查看远程分支 git branch -r r 代表remote

合并分支

$ git merge br-namebr-name分支合并到当前分支下 加入--no-ff则表示禁用Fast forward模式。即新建commit而不是切换HEAD指针来实现 $ git merge --no-ff -m "merge with no-ff" dev 合并分支前可以通过git diff <source_branch> <target_branch>来查看两者不同

合并冲突

merge分支时,如果两分支对同一地方做了不同的修改,则为冲突,冲突的文件git会生成如下内容

1
2
3
4
5
6
<<<<<<< HEAD 
Creating a new branch is quick & simple. 
======= 
Creating a new branch is quick AND simple. 
>>>>>>> feature1

解决完冲突 合并之后 记得执行

1
$ git rebase --continue

强制更新 tag 到指定的 commit

1
2
git tag --force v1.0.0 bc63359
git push --tags -f

git ll 可以看到短版本号,如果不好使 请执行如下脚本然后重试

下面是常用的 git 别名

1
2
3
4
5
6
7
8
git config --global alias.ll "log --graph --all --pretty=format:'%Cred%h %Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit --date=relative" 
git config --global alias.co checkout 
git config --global alias.br branch 
git config --global alias.ci commit 
git config --global alias.st status 
git config --global alias.last 'log -1 HEAD' 
git config --global alias.df diff
git config --global alias.co checkout

详细资料参考

批量删除 本地分支

1
git branch | grep 'branchName' |xargs git branch -D

这个是通过 shell 管道命令来实现的批量删除分支的功能。 grep是对git branch的输出结果进行匹配,匹配值为branchNamexargs的作用是将参数列表转换成小块分段传递给其他命令。 所以这个命令的意思就是 从分支列表中匹配到指定的分支,然后一个一个(分成小块)传递给删除分支的命令,最后进行删除。 从而达到批量删除分支的目的

例如:我想删除本地 以 5.8.开头的分支 我可以这样写

1
2
3
git branch | grep '5.8.*' |xargs git branch -D

通过通配符即可

2018年9月30日更新

持续更新

git clean 清理掉不在git版本控制之内的文件

1
git clean -dfx  

2020.1.7 update

删除工程中总是放到ignore中跟踪不上小的xcode userdata

最近工程中总是出现下面这个文件 无论如何放gitignore总是不生效

1
2
Crown.xcworkspace/xcuserdata/sunyazhou.xcuserdatad/UserInterfaceState.xcuserstate

下面看下正确的操作

` [project] 替换成你的工程 [username] `替换成你的用户名

1
2
git rm --cached [project].xcodeproj/project.xcworkspace/xcuserdata/[username].xcuserdatad/UserInterfaceState.xcuserstate
git commit -m "Removed file that shouldn't be tracked"

2022.12.2 更新自Can’t ignore UserInterfaceState.xcuserstate

如果需要各种语言的ignore可以参考A collection of useful .gitignore templates

该博客文章由作者通过 CC BY 4.0 进行授权。

Webview的NSScrollView禁用滑动功能

DFS算法扫描上传文件/文件夹