1、用遠程代碼庫中的版本完全覆蓋本地工作版本
git reset --hard
git pull
2、保留本地代碼庫中沒有push的改動,更新代碼,再還原代碼
git stash
git pull
git stash pop
3、撤銷commit但未push的改動
git log #找到要撤銷的id
git reset --hard id #撤銷改動,本地代碼恢復到id版本
git stash pop #撤銷commit,但不對本地代碼修改撤銷
4、撤銷緩衝區改動
git reset
5、提交
git add -A #提交所有變化
git add -u #提交modified和deleted文件,不包括new
git add . #提交new和modified文件,不包括deleted文件
6、分支管理
git branch #列出本地所有分支
git branch </name/> #創建分支name
git branch -d </name/> #刪除分支name
git checkout </name/> #切換分支
git checkout -b </name/> #創建並切換分支
7、遠程庫與本地庫合併
git remote #查看遠程庫信息
git push origin dev #推送指定分支dev
git checkout -b dev origin/dev #創建遠程origin的dev分支到本地
git merge </name/> #合併指定分支name到當前分支
git branch --set-upstream dev origin/dev #建立本地dev分支與遠程分支dev的關聯
(在pyCharm中也可以直接從右下角的Git-》RemoteBranches選擇對應的遠程分支,點左鍵check out as
就可以自動創建本地關聯的對應分支)
8、刪除“.pyc”文件
find /tmp -name "*.pyc"
xargs rm -rf
9、撤銷已commit但未git push的命令
git log #找到想要撤銷的id
git reset -hard id #將代碼恢復到前一commit_id 對應的版本,同時完成commit的撤銷
git reset id #完成commit的撤銷,但不對本地代碼修改進行撤銷,可以通過commit再次提交本地代碼的修改
1.放棄本地修改
使用本地版本覆蓋:
使用版本庫覆蓋:
當執行 "git checkout HEAD ." 或者 "git checkout HEAD <file>" 命令時,會用 HEAD 指向的 master 分支中的全部或者部分文件替換暫存區以及工作區中的文件。這個命令也是極具危險性的,因爲不但會清除工作區中未提交的改動,也會清除暫存區中未提交的改動。
使用暫存區覆蓋:
當執行 "git checkout ." 或者 "git checkout -- <file>" 命令時,會用暫存區全部或指定的文件替換工作區的文件。這個操作很危險,會清除工作區中未添加到暫存區的改動。
使用遠程版本覆蓋
git fetch --all //只是下載代碼到本地,不進行合併操作
git reset --hard origin/dev //把HEAD指向下載的dev分支版本
git pull //再次更新本地
2.忽略某文件以及某文件夾
a、從未提交過的文件可以用.gitignore 也就是添加之後從來沒有提交(commit)過的文件,可以使用.gitignore忽略該文件,該文件只能作用於未跟蹤的文件(Untracked Files),也就是那些從來沒有被 git 記錄過的文件, 比如,忽略log/下的日誌文件,可以在.gitignore中寫 log/*
創建.gitignore
修改文件,添加忽略正則
.idea //忽略.idea文件夾及文件夾下文件
*.iml //忽略以.iml結尾的文件
# 忽略*.o和*.a文件
*.[oa]
# 忽略*.b和*.B文件,my.b除外
*.[bB]
!my.b
**/foo: 忽略/foo, a/foo, a/b/foo等
# 忽略dbg文件和dbg目錄
dbg
# 只忽略dbg目錄,不忽略dbg文件
dbg/
# 只忽略dbg文件,不忽略dbg目錄
dbg
!dbg/
# 只忽略當前目錄下的dbg文件和目錄,子目錄的dbg不在忽略範圍內
/dbg
提交本地版本庫,推送到遠程項目,方便協作,項目管理
添加忽略之後,已經提交到版本庫中的文件是無法忽略的。只能clone到本地,刪除後,再忽略。
刪除track的文件 (已經commit的文件)
git rm -r --cached 文件(從緩存中刪除文件)
在.gitignore文件中添加忽略規則
(1) 在.gitignore文件中添加ignore條目, 如: some/path/some-file.ext
(2) 提交.gitignore文件: git commit -am "添加ignore規則"
b、已經推送(push)過的文件,想從git遠程庫中刪除,並在以後的提交中忽略,但是卻還想在本地保留這個文件, 執行命令 git rm --cached Xml/config.xml, 後面的 Xml/config.xml 是要從遠程庫中刪除的文件的路徑,支持通配符*, 比如,不小心提交到git上的一些log日誌文件,想從遠程庫刪除,可以用這個命令
c、已經推送(push)過的文件,想在以後的提交時忽略此文件,即使本地已經修改過,而且不刪除git遠程庫中相應文件 執行命令 git update-index --assume-unchanged Xml/config.xml 後面的 Xml/config.xml 是要忽略的文件的路徑。如果要忽略一個目錄,打開 git bash,cd到目標目錄下,執行: git update-index --assume-unchanged $(git ls-files | tr '\n' ' ') 比如有一個配置文件記錄數據庫的鏈接信息,每個人的鏈接信息肯定不一樣,但是又要提供一個標準的模板,用來告知如何填寫鏈接信息,那麼就需要在git遠程庫上有一個標準配置文件,然後每個人根據自己的具體情況,修改一份鏈接信息自用,而且不會將該配置文件提交到庫
3.版本回退
git reset 是指將當前head的內容重置,不會留log信息。
git reset HEAD filename 從暫存區中移除文件
git reset --hard HEAD~3 會將最新的3次提交全部重置,就像沒有提交過一樣。
git reset --hard [commit哈希值](38679ed709fd0a3767b79b93d0fba5bb8dd235f8) 回退到 38679ed709fd0a3767b79b93d0fba5bb8dd235f8 版本
根據--soft --mixed --hard,會對working tree和index和HEAD進行重置:
git reset --mixed:此爲默認方式,不帶任何參數的git reset,它回退到某個版本,只保留源碼,回退commit和index信息
git reset --soft:回退到某個版本,只回退了commit的信息,不會恢復到index file一級。如果還要提交,直接commit即可
git reset --hard:徹底回退到某個版本,本地的源碼也會變爲上一個版本的內容
命令 git log --pretty=oneline --abbrev-commit 找到歷史提交的commit id
4.解決衝突
情景一:在當前分支上,直接修改衝突代碼--->add--->commit。
情景二:在本地當前分支上,修改衝突代碼--->add--->commit--->push
5.強制用本地覆蓋遠程
git push origin master --force
6.本地項目添加到遠程
1.在遠程新建倉庫
2.在本地項目運行命令
git init
git remote add origin [email protected]:用戶名/項目名.git
git add 項目名
git commit -am "註釋" 提交項目文件
git push -u origin master 推送到遠程倉庫
如果有衝突則先解決衝突
git fetch + git merge 與 git pull 的區別是前者下載與合併分成了兩步,後者一次做完
當執行 "git reset HEAD" 命令時,暫存區的目錄樹會被重寫,被 master 分支指向的目錄樹所替換,但是工作區不受影響。刪除已經add但是還沒有提交的文件
當執行 "git rm --cached <file>" 命令時,會直接從暫存區刪除文件,工作區則不做出改變。
7.設置保存用戶名密碼
git config --global user.name "[email protected]"
git config --global user.email "[email protected]"
git config --global credential.helper store
8.將指定文件恢復到某個版本
場景: 對於某個Git控制下的文件進行了修改,但是改的不滿意,想退回到改之前的版本。假定該文件爲 src/main/main.c
解決方法:
第一步: 在命令行中輸入 git log src/main/main.c 得到該文件的commit 歷史。
第二步: 複製需要回退版本的hash,在此假設我們回退到 95d4f787ff2949 ,則複製該序列即可
第三步:checkout 對應版本。格式爲 git checkout <hash> <filename>, 在此即爲命令行中輸入 git checkout 95d4f787ff2949 src/main/main.c
第四步: commit checkout下來的版本。 如: git commit -m "revert to previous version"
9.查看遠程地址命令
git remote -v
10.標籤
命令 git tag <tagname> 用於新建一個標籤,默認爲HEAD,也可以指定一個commit id;
命令 git tag -a <tagname> -m "this is memeo" 可以指定標籤信息;
命令 git tag 可以查看所有標籤。
命令 git tag -d <tagname> 刪除標籤
命令 git push origin :refs/tags/<tagname> 可以刪除一個遠程標籤。
命令git push origin --tags 一次性推送全部尚未推送到遠程的本地標籤
命令git push origin <tagname> 推送某個標籤到遠程