比如我想 git 跟踪目录内所有文件,在修改多个文件后只需要 git commit 一次就行了。
现在每次 git commit 前都要用 git add 添加下文件,太烦了吧。还要先 git status 查看下修改了哪些文件,又添加了几个文件。
又比如自动跟踪已 git add 过的文件,防止修改文件名后忘了 push 那个文件。
我刚开始学 git 遇到的问题有点多。
目前还不知道怎么查看仓库内的文件,百度找了半天没找到我要得。
![]() | 1 dacapoday 2019-01-21 12:46:11 +08:00 via iPhone 那就先用图形客户端呗,至少能熟悉功能。然后再看图形客户端的命令日志。 |
![]() | 2 wuyuanwei 2019-01-21 14:03:11 +08:00 |
![]() | 3 frylkrttj OP @wuyuanwei “ git commit --all ”只能提交已“ git add ”过的文件呢。这样我目录内新添加的文件和修改文件名后的文件咋办呢。 |
6/div> besto 2019-01-21 15:08:24 +08:00 首先 git add 是可以 add 目录的 其次 git add 之后 你可以再更改, 这个时候提交只会提交你 add 那个点的版本. 你这个需求明显不合理啊 |
7 rocksolid 2019-01-21 15:22:26 +08:00 git add . 不就行了么 有什么麻烦的 |
8 rocksolid 2019-01-21 15:23:06 +08:00 或者直接用 vscode |
9 ddddad 2019-01-21 15:32:17 +08:00 ![]() lz 还没踩过提交错误的坑 |
![]() | 10 hjq98765 2019-01-21 15:36:57 +08:00 我的感觉是,git 设置成这么个流程是有其中的深意的 |
11 frye 2019-01-21 15:39:00 +08:00 ![]() git add . |
![]() | 12 frylkrttj OP 看前面这么多回复差点又以为是自己笨了,幸好等来了 #11 @frye 的回复,才发现自己也没那么笨嘛,@frye 是真知道我在想什么啊。 |
![]() | 13 frylkrttj OP 现在好像只剩下,怎么实现自动跟踪文件名的问题了。 |
14 quinoa42 2019-01-21 15:53:14 +08:00 Untracked, stated 和 commited 是三种不同的状态,这么做自然有它的理由 不过关于楼主的问题,不少 IDE 是支持自动 track 的,比如 Intellij 但是我觉得这“智能”功能很烦,所以我一般都是关闭 IDE 的 git 相关功能的 |
![]() | 15 passerbytiny 2019-01-21 16:25:01 +08:00 @frylkrttj #13 文件名修改无解,必须 IDE 解决,纯命令行是 git rename,相当不方便,还容易漏(你要不用这命令,那文件改名后是 remove 和 add )。 |
![]() | 16 hash 2019-01-21 17:07:26 +08:00 按照楼主的描述似乎只需要写一个 alias? |
![]() | 17 wuyuanwei 2019-01-21 18:01:04 +08:00 @frylkrttj `git add .` 之前最好还是 `git status` 检查下状态,避免不必要的提交错误。通常我会配合 Facebook PathPicker 手动选择待暂存的文件。 |
![]() | 18 V2exUser 2019-01-21 18:04:20 +08:00 via Android idea 倒是会自动弹出是否自动加入 git 的窗口 |
![]() | 19 ww23xx 2019-01-21 19:10:26 +08:00 via Android (小姊姊我面向 V2EX 编程) |
![]() | 20 chinvo 2019-01-21 19:12:21 +08:00 不是,这些简单问题,你 Google 一下好么 再不济去微信上问那些大叔大爷啊 [:doge:] |
![]() | 21 chinvo 2019-01-21 19:13:13 +08:00 |
![]() | 22 shuizhengqi 2019-01-21 19:20:42 +08:00 ![]() 一看就是年轻人,没写过大项目 |
![]() | 23 stephen9357 2019-01-21 19:23:43 +08:00 无脑 git add .早晚出事,我还是习惯 git status,然后挨个 git add,起码心里有数。 |
24 hgjhgjgjhgjg 2019-01-21 19:24:51 +08:00 ![]() alias grb="git rebase" alias gaa="git add -A" alias gs="git status" alias gm="git commit" gaa gmm -m "xxx" 楼主可以自定义一个 gam 试试看。 |
![]() | 25 des 2019-01-21 19:25:57 +08:00 via Android 不是 command + k,然后选自己要提交的文件和变化么? |
26 frankkai 2019-01-21 19:47:29 +08:00 git ac |
27 tomoya92 2019-01-21 20:01:03 +08:00 via iPhone 我更想知道 git 提交怎么不用输入后面的-m 每次提交都要写一下-m "update" |
![]() | 28 imherer 2019-01-21 20:08:40 +08:00 用带图形界面的客户端,比如 SourceTree、Github Desktop 等都可以 但是建议楼主最好别这样做,不出事还好,出事就麻烦了 |
![]() | 30 ooops 2019-01-21 20:27:53 +08:00 多用用就没有这些问题了。建议从头到尾看看 Pro Git。有问题看到后面就慢慢懂了。我看了半天问题不知道楼主想干啥。 |
![]() | 31 gesse 2019-01-21 20:35:54 +08:00 你可能对 git 有什么误解 |
![]() | 35 frylkrttj OP @stephen9357 我刚学 git 需要反复操作 正需要 git add . 编程做项目离我还远。 |
![]() | 36 frylkrttj OP @hgjhgjgjhgjg #24 你这配置是写在那个文件的,gam 又是什么。 |
37 fan123199 2019-01-21 21:08:13 +08:00 git add folder/* && git commit -m "all file in folder updated" && git push 一条龙, 个人开发没问题。 |
40 frienmo 2019-01-21 23:09:02 +08:00 @hgjhgjgjhgjg 握手 看我的 ##############Git############ #alias git='LANG=en_US git' alias gl='git log' alias gs='git status' alias gfp='git fetch -p' alias gcm='git checkout master' alias gc-='git checkout -' alias gcp='git cherry-pick' alias gau='git add -u' alias gpm='git pull origin master' alias gnb='function _gnb { gcm; gpm ; git checkout -b $1 ;echo $1;}; _gnb' alias amend='git add -u;git commit --amend --no-edit' alias gr='function _gr() { re='^[0-9]+$'; if [[ $1 =~ $re ]] ; then git rebase -i HEAD~$1; else git rebase -i $1; fi;};_gr' alias gz='git reset HEAD~1' alias delete-merged-branches='function _f { git checkout --quiet master && git branch --merged | grep --invert-match '\\*' | xargs -n 1 git branch --delete; git checkout --quiet @{-1}; }; _f' |
![]() | 41 ynyounuo 2019-01-22 02:55:46 +08:00 via iPhone 如果你的工作流只是 git add . git commit -m "{some_useless_info}" git push 那你基本就是在浪费时间骗自己在用 git 而已 建议 rm -rm .git/ 一劳永逸 |
![]() | 42 ynyounuo 2019-01-22 02:56:10 +08:00 via iPhone rf* |
43 SharkIng 2019-01-22 06:07:48 +08:00 初学者这样用倒是可以,我以前也这么用,但是的确像楼上说的问题很多。当你真正做项目后,或者在公司里用的时候就会明白这样不行的。所以刚开始养好习惯比较好,不要怕麻烦。 |
![]() | 47 Wolther47 2019-01-22 07:55:45 +08:00 via iPhone 我觉的楼上有几位言过了,一开始用 git,还是先以熟悉为目的,反正也不是非常重要的代码,翻车了才能更好的记住( |
48 hakono 2019-01-22 08:35:59 +08:00 via Android ![]() 嘻嘻,等楼主开发程序后,试着多用几次 git add *就会发现,咦,这次把一堆不在 ignore 名单里的临时文件提交了。 下次:卧槽把刚刚创建的带服务器帐号密码的配置文件一并提交 push 到 github 了。 然后楼主开始想着怎么回滚,怎么操作远程仓库,然后学会了 git push --force 然后把推送的坑也踩了一遍 233 |
![]() | 49 james2013 2019-01-22 08:38:45 +08:00 ![]() 直接用图形化工具 TortoiseGit. 丰富的功能,直接用鼠标点击就可以了. 1 个命令也不需要输入. |
![]() | 50 dajj 2019-01-22 08:55:20 +08:00 脚本。。。 |
![]() | 51 des 2019-01-22 08:59:42 +08:00 via Android |
52 hakono 2019-01-22 09:14:01 +08:00 via Android @des 主要很无脑 add 的话,多时候都是 add commit push 三件套 然后回过头就才发现远程仓库已经塞入了多余的文件, 这时候操作远程对新手就是个大坑了,然后这时候通过各方百度,很大几率会学会 git rest --hard 和 git push --force 这两个命令。 |
![]() | 53 ElfenSterben 2019-01-22 09:25:52 +08:00 你把 gitignore 配置好然后 git add . 有什么问题么? |
![]() | 54 flyingghost 2019-01-22 09:36:15 +08:00 新手学习过程中看不到风险很正常。提出优化建议起码证明 lz 进一步思考了。 但 git 不这样设计不是因为 git 蠢,而是因为这样设计是错的:误提交实在是太多太多了。。。 亲身经历过同事误把 密钥.java.bak 提交进仓库,打包,发布,被竞争对手反编译,获取到公司通用算法和我部门密钥,暗搓搓上线我司在线服务的破解版,然后全部门在过年前一天飞机火车汽车逆流回司加班的壮丽事件。 日常岁月静好的代码仓库,也时不时会出现不应当提交的文件。所以需要 code review,需要服务端 commit 钩子,需要定期检查清理。 单就文件的尺度来说,git/svn 是允许你整体提交的,也就是说你无需手动一个个变更点看过来,一把梭提交整个文件。是不是和“提交整个目录”很像?所以 git 不是没想到,而是在方便和危险之间找到了平衡:文件粒度。 但我要求的最佳实践,依然是提交的时候检查精确到行,每个变更都确认需要提交。(你看我没有要求精确到字符已经很人性化很方便啦!) |
![]() | 55 liu19931020 2019-01-22 10:12:17 +08:00 vscode+1 |
![]() | 56 frylkrttj OP |
57 xxgirl2 2019-01-22 10:31:59 +08:00 先 status,然后 diff,检查文件、格式、修改无误后,再 add。 |
![]() | 58 omph 2019-01-22 10:37:31 +08:00 自己写个驻留程序 daemon,监控目录中文件变动,自动添加即可。当然最好支持过滤功能 |
![]() | 59 libook 2019-01-22 10:37:59 +08:00 用 Git 养成好习惯是头等重要的,用时的一点点麻烦,是为了避免解决问题时的恶心。 “自动跟踪”坑很多,比如提交了并不想提交的文件(临时测试修改的代码等),以后用用就知道还是老老实实 diff 再 add 最稳妥,版本控制工具使用来可靠控制代码版本的,不应该是累赘,觉得用起来很麻烦真不如不用。 团队合作使用 git commit -a 和 git push --force 等指令,会被人打死。 |
![]() | 60 omph 2019-01-22 10:39:41 +08:00 和通知功能 |
61 karllynn 2019-01-22 10:41:34 +08:00 这种简单问题,你读一下 git 文档不就行了么。。。 |
![]() | 62 xio 2019-01-22 10:48:32 +08:00 ```bash function gitall() { git add . -A if [ -n "$1" ]; then git commit -m "$1" else git commit -m "update" fi git push } alias gacp="gitall" ``` |
![]() | 63 weixiangzhe 2019-01-22 13:34:08 +08:00 我一般快速提交是这样的 gaa && gc -m 'msg' |
64 gaby2018 2019-01-22 14:43:18 +08:00 楼主应该是 svn 用多了,git 区别还是挺大 |
![]() | 65 halk 2019-01-22 17:17:23 +08:00 git add -u |
![]() | 66 msg7086 2019-01-22 22:31:58 +08:00 顺路说一句,学 Git (项目管理)和学 Git (命令行)是两回事。 你说你学 Git,可以先想想你要学其中的哪一个,还是两个都要。 我还是建议找个好点的 GUI。 |
![]() | 68 guanhui07 2019-01-23 11:09:58 +08:00 git add . |
69 kaiser1992 2019-01-23 11:21:42 +08:00 git add -A |